File: mprotect.2

package info (click to toggle)
manpages-es 0.4a-2
  • links: PTS
  • area: main
  • in suites: hamm, slink
  • size: 3,592 kB
  • ctags: 3
  • sloc: sh: 59; makefile: 42
file content (141 lines) | stat: -rw-r--r-- 4,396 bytes parent folder | download
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
.\" -*- nroff -*-
.\"
.\" Copyright (C) 1995 Michael Shields <shields@tembel.org>.
.\"
.\" El permiso est concedido para hacer y distribuir copias verbatim de este
.\" manual provisto de copyright y este pemiso preserva sobre todas las copias.
.\"
.\" La venia es concedida para hacer y distribuir copias verbatim de este
.\" manual provisto de copyright y esta venia preserva sobre todas las copias.
.\"
.\" La venia es concedida para copiar y distribuir versiones modificadas de este
.\" manual bajo las condiciones de copiado de verbatim, siempre que el completo
.\" resultado derivado del trabajo sea distribudo bajo los trminos de una venia
.\" idntica a sta.
.\" 
.\" Ya que el kernel de Linux y las bibliotecas estn constantemente cambiando,
.\" esta pgina puede ser incorrecta o desactualizada. El autor(es) no asumen
.\" reponsabilidades referentes a errores u omisiones, o resultados peligrosos
.\" derivados del uso de esta informacin aqu contenida. EL autor(es) no deben
.\" de haber tenido el mismo nivel de cuidad en la produccin de este manual,
.\" el cul est libre de cargo por licencia, como han podido cuando trabajan
.\" profesionalmente.
.\" 
.\" Versiones formateadas o procesadas de este manual, si no estn acompaadas por
.\" la fuente, deben reconocer el copyright y el autor de este trabajo.
.\"
.\" Modificado Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
.\" Modificado Sat May 31 15:32:03 MET 1997 by Andries Brouwer <aeb@cwi.nl>
.\"
.TH MPROTECT 2 "31 May 1997" "Linux 2.0" "Manual del Programador de Linux"
.SH NOMBRE
mprotect \- accesos de control permisibles a una regin de memoria
.SH SINOPSIS
.nf
.B #include <sys/mman.h>
.sp
\fBint mprotect(const void *\fIaddr\fB, size_t \fIlen\fB, int \fIprot\fB);
.fi
.SH DESCRIPCIN
.B mprotect
controla como una seccin de memoria puede ser accedida.  Si un acceso no
es permitido por la proteccin dada, el programa recive un
.BR SIGSEGV .
.PP
.I prot
es un bitwise-or de los siguientes valores:
.TP 0.8i
.B PROT_NONE
La memoria no puede ser accedida de ninguna forma.
.TP
.B PROT_READ
La memoria puede ser leda.
.TP
.B PROT_WRITE
La memoria puede ser escrita.
.TP
.B PROT_EXEC
La memoria puede contener cdigo ejecutable.
.PP
La nueva proteccin reemplaza cualquier proteccin existente.  Por ejemplo, si la
memoria haba sido previamente marcada \fBPROT_READ\fR, y \fBmprotect\fR
es entonces llamada con \fIprot\fR \fBPROT_WRITE\fR, no ser leble.
.SH VALOR DEVUELTO
Si xito,
.B mprotect
devuelve cero.  Si error, \-1 es devuelto, y
.I errno
est configurado apropiadamente.
.SH ERRORES
.TP 0.8i
.B EINVAL
\fIaddr\fR no es un puntero(indicador) vlido, o no es un mltiplo de PAGESIZE.
.TP
.B EFAULT
La memoria no puede ser accedida.
.TP
.B EACCES
La memoria no puede dar el acceso especificado.  Esto puede ocurrir,
por ejemplo, si Ud.
.BR mmap (2)
un fichero al cual tu tienes acceso de slo lectura, entonces pregunta
.B mprotect
para marcarlo
.BR PROT_WRITE .
.TP
.B ENOMEM
Las estructuras internas del kernel no pudieron ser localizadas.
.SH EXAMPLE
.nf
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mman.h>

#include <limits.h>    /* for PAGESIZE */
#ifndef PAGESIZE
#define PAGESIZE 4096
#endif

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

    /* Allocate a buffer; it will have the default
       protection of PROT_READ|PROT_WRITE. */
    p = malloc(1024+PAGESIZE-1);
    if (!p) {
        perror("Couldn't malloc(1024)");
        exit(errno);
    }

    /* Align to a multiple of PAGESIZE, assumed to be a power of two */
    p = (char *)(((int) p + PAGESIZE-1) & ~(PAGESIZE-1));

    c = p[666];         /* Read; ok */
    p[666] = 42;        /* Write; ok */

    /* Mark the buffer read-only. */
    if (mprotect(p, 1024, PROT_READ)) {
        perror("Couldn't mprotect");
        exit(errno);
    }

    c = p[666];         /* Read; ok */
    p[666] = 42;        /* Write; program dies on SIGSEGV */

    exit(0);
}
.fi
.SH "CONFORMING TO"
SVr4, POSIX.1b (formerly POSIX.4).  SVr4 defines an additional error
code EAGAIN. The SVr4 error conditions don't map neatly onto Linux's.
POSIX.1b dice que
.B mprotect
slo puede ser usada sobre regiones de memoria obtenidas desde
.BR mmap (2).
.SH SEE ALSO
.BR mmap (2)