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 146
|
.\" -*- 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>
.\" Translation revised May 3 1998 by Juan Piernas <piernas@dif.um.es>
.\"
.TH MPROTECT 2 "31 Mayo 1997" "Linux 2.0" "Manual del Programador de Linux"
.SH NOMBRE
mprotect \- controla el tipo de acceso permitido sobre 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 la forma en que una seccin de memoria puede ser accedida.
Si un acceso no es permitido por la proteccin dada, el programa recibe un
.BR SIGSEGV .
.PP
.I prot
es un O\-lgico a nivel de bits de los siguientes valores:
.TP 1.1i
.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
se llama entonces con \fIprot\fR igual a \fBPROT_WRITE\fR, no se prodr
leer.
.SH VALOR DEVUELTO
En caso de xito,
.B mprotect
devuelve cero. En caso de error, se devuelve \-1, y se asigna a
.I errno
un valor apropiado.
.SH ERRORES
.TP 0.8i
.B EINVAL
\fIaddr\fR no es un puntero vlido, o no es un mltiplo de PAGESIZE.
.TP
.B EFAULT
La memoria no puede ser accedida.
.TP
.B EACCES
La memoria no permite el acceso especificado. Esto puede ocurrir si,
por ejemplo, asocia a una zona de memoria mediante
.BR mmap (2)
un fichero al cual slo tiene acceso de lectura y pide a
.B mprotect
que lo marque
.BR PROT_WRITE .
.TP
.B ENOMEM
No se han podido reservar estructuras internas del ncleo.
.SH EJEMPLO
.nf
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/mman.h>
#include <limits.h> /* por PAGESIZE */
#ifndef PAGESIZE
#define PAGESIZE 4096
#endif
int
main(void)
{
char *p;
char c;
/* Reserva un bffer; por defecto, tendr
proteccin PROT_READ|PROT_WRITE. */
p = malloc(1024+PAGESIZE-1);
if (!p) {
perror("malloc: imposible reservar 1024 bytes");
exit(errno);
}
/* Alinear a una direccin mltiplo de PAGESIZE,
suponiendo que sea una potencia de 2 */
p = (char *)(((int) p + PAGESIZE-1) & ~(PAGESIZE-1));
c = p[666]; /* Leer; bien */
p[666] = 42; /* Escribir; bien */
/* Marca el bffer como de slo-lectura. */
if (mprotect(p, 1024, PROT_READ)) {
perror("mprotect: imposible cambiar proteccin");
exit(errno);
}
c = p[666]; /* Leer; bien */
p[666] = 42; /* Escribir; el programa recibe SIGSEGV
y muere*/
exit(0);
}
.fi
.SH "CONFORME A"
SVr4, POSIX.1b (formalmente POSIX.4). SVr4 define un cdigo de error
adicional, EAGAIN. Las condiciones de error de SVr4 coinciden debidamente
con las de Linux.
POSIX.1b dice que
.B mprotect
slo puede ser usada sobre regiones de memoria obtenidas desde
.BR mmap (2).
.SH "VASE TAMBIN"
.BR mmap (2)
|