File: mprotect.2

package info (click to toggle)
manpages-fr 0.9.3-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 7,052 kB
  • ctags: 4
  • sloc: makefile: 58; sh: 8
file content (145 lines) | stat: -rw-r--r-- 4,210 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
.\" -*- nroff -*- 
.\"
.\" Copyright (C) 1995 Michael Shields <shields@tembel.org>.
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\" 
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\" 
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and author of this work.
.\"
.\" Traduction  12/10/1996 Christophe BLAESS (ccb@club-internet.fr)
.\" Mise a Jour 3/06/97
.TH MPROTECT 2 "3 Juin 1997" "Linux 2.0" "Manuel du programmeur Linux"
.SH NOM
mprotect \- Contrler les autorisations d'accs  une partie de la mmoire.
.SH SYNOPSIS
.nf
.B #include <sys/mman.h>
.sp
\fBint mprotect(const void *\fIaddr\fB, size_t *\fIlen\fB, int \fIprot\fB);
.fi
.SH DESCRIPTION
.B mprotect
contrle la manire d'accder  une portion de la mmoire. Si un
accs interdit se produit, le programme reoit un signal
.BR SIGSEGV.
.PP
.I prot
est un OU binaire ( | ) entre les valeurs suivantes
.TP 0.8i
.B PROT_NONE
On ne peut pas accder du tout  la zone de mmoire.
.TP
.B PROT_READ
On peut lire la zone de mmoire.
.TP
.B PROT_WRITE
On peut crire dans la zone de mmoire.
.TP
.B PROT_EXEC
La zone de mmoire peut contenir du code excutable.
.PP
La nouvelle protection remplace toute autre protection prcdente.
Par exemple, si la mmoire a t marque prcdemment \fBPROT_READ\fR, 
et si l'on appelle \fBmprotect\fR avec \fBPROT_WRITE\fR, la zone
concerne ne sera plus lisible.
.SH "VALEUR RENVOYE"
.B mprotect
renvoie 0 si il russit, ou \-1 s'il choue, auquel cas
.I errno
contient le code d'erreur.
.SH ERREURS
.TP 0.8i
.B EINVAL
\fIaddr\fR n'est pas un pointeur valide, ou ce n'est pas un multiple de
PAGESIZE.
.TP
.B EFAULT
La mmoire n'est pas accessible.
.TP
.B EACCES
L'accs spcifi n'est pas possible sur ce type de mmoire. Ceci
se produit par exemple si vous utilisez
.BR mmap (2)
pour reprsenter un fichier en lecture\-seule en mmoire, et
si vous demandez de marquer cette zone avec
.BR PROT_WRITE.
.TP
.B ENOMEM
Pas assez de mmoire pour le noyau
.SH "EXEMPLE D'UTILISATION"
.nf
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mman.h>

#include <limits.h> /* pour avoir PAGESIZE */

#ifndef PAGESIZE
  #define PAGESIZE 4096
#endif

int
main(void)
{
    char *p;
    char c;

    /* Allocation d'un buffer, protection 
       par dfaut PROT_READ|PROT_WRITE. */
    p = malloc(1024 + PAGESIZE - 1);
    if (!p) {
        perror("Impossible d'allouer suffisament de mmoire");
        exit(errno);
    }

    /* 
     * Aligner p sur un multiple de PAGESIZE (que l'on suppose tre
     * une puissance de 2)
     */
    p = (char *) (((int) p + PAGESIZE-1) & ~(PAGESIZE-1));

    c = p[666];         /* lecture ok */
    p[666] = 42;        /* ecriture ok */

    /* Buffer marqu en lecture-seule */
    if (mprotect(p, 1024, PROT_READ)) {
        perror("Impossible d'utiliser mprotect");
        exit(errno);
    }

    c = p[666];         /* lecture ok */
    p[666] = 42;        /* ecriture, fin du programme avec SIGSEGV */

    exit(0);
}
.fi
.SH CONFORMIT
SVr4, POSIX.1b (anciennement POSIX.4).  SVr4 dfinit un code d'erreur
EAGAIN supplmentaire. Les conditions d'erreur SVr4 ne correspondent pas
tout  fait  celles de Linux.
POSIX.1B prcise que
.B mprotect
ne peut tre utilis que sur des zones de mmoire obtenues avec
.BR mmap (2).
.SH "VOIR AUSSI"
.BR mmap (2)

.SH TRADUCTION
Christophe Blaess, 1997.