Penguin

Differences between version 2 and predecessor to the previous major change of mprotect(2).

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 2 Last edited on Saturday, March 15, 2003 1:02:07 am by PerryLorier Revert
Older page: version 1 Last edited on Tuesday, June 4, 2002 12:23:43 am by perry Revert
@@ -1,115 +1,75 @@
-MPROTECT  
-!!!MPROTECT  
-NAME  
-SYNOPSIS  
-DESCRIPTION  
-RETURN VALUE  
-ERRORS  
-EXAMPLE  
-CONFORMING TO  
-SEE ALSO  
-----  
 !!NAME 
+mprotect - control allowable accesses to a region of memory  
  
-  
-mprotect - control allowable accesses to a region of memory  
 !!SYNOPSIS 
-  
-  
- __#include  
-__''addr''__, size_t__ ''len''__, int__ ''prot''__);  
- __ 
+ __#include <sys/mman.h>__  
+ __int mprotect(const void * __''addr''__, size_t__ ''len''__, int__ ''prot''__);__ 
 !!DESCRIPTION 
+__mprotect__ controls how a section of memory may be accessed. If an access is disallowed by the protection given it, the program receives a __SIGSEGV__.  
  
+''prot'' is a bitwise-or of the following values:  
+;__PROT_NONE__: The memory cannot be accessed at all.  
+;__PROT_READ__: The memory can be read.  
+;__PROT_WRITE__: The memory can be written to.  
+;__PROT_EXEC__: The memory can contain executing code.  
  
-__mprotect__ controls how a section of memory may be  
-accessed. If an access is disallowed by the protection given  
-it, the program receives a __SIGSEGV __. 
+The new protection replaces any existing protection. For example, if the memory had previously been marked __PROT_READ__, and __mprotect__ is then called with  
+''prot'' __PROT _WRITE __, it will no longer be readable
  
-  
-''prot'' is a bitwise-or of the following  
-values:  
-  
-  
-__PROT_NONE__  
-  
-  
-The memory cannot be accessed at all.  
-  
-  
-__PROT_READ__  
-  
-  
-The memory can be read.  
-  
-  
-__PROT_WRITE__  
-  
-  
-The memory can be written to.  
-  
-  
-__PROT_EXEC__  
-  
-  
-The memory can contain executing code.  
-  
-  
-The new protection replaces any existing protection. For  
-example, if the memory had previously been marked  
-__PROT_READ__, and __mprotect__ is then called with  
-''prot'' __PROT_WRITE__, it will no longer be  
-readable.  
 !!RETURN VALUE 
-  
-  
- On success, __mprotect__ returns zero. On error, -1 is  
- returned, and ''errno'' is set  
- appropriately. 
+On success, __mprotect__ returns zero. On error, -1 is returned, and ''errno'' is set appropriately. 
 !!ERRORS 
+;[EINVAL]: ''addr'' is not a valid pointer, or not a multiple of PAGESIZE.  
+;[EFAULT]: The memory cannot be accessed.  
+;[EACCES]: The memory cannot be given the specified access. This can happen, for example, if you mmap(2) a file to which you have read-only access, then ask __mprotect__ to mark it __PROT_WRITE__.  
+;[ENOMEM]: Internal kernel structures could not be allocated.  
  
+!!EXAMPLE  
+ #include <stdio.h>  
+ #include <stdlib.h>  
+ #include <errno.h>  
+ #include <sys/mman.h>  
  
-__EINVAL__  
+ #include <limits.h> /* for PAGESIZE */  
+ #ifndef PAGESIZE  
+ #define PAGESIZE 4096  
+ #endif  
  
+ int  
+ main(void)  
+ {  
+ char *p;  
+ char c;  
  
-''addr'' is not a valid pointer, or not a multiple of  
-PAGESIZE.  
+ /* Allocate a buffer; it will have the default  
+ protection of PROT_READ|PROT_WRITE. */  
+ p = malloc(1024+ PAGESIZE&#8208;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&#8208;1) & ~(PAGESIZE&#8208;1));  
  
-__EFAULT__  
+ c = p[666]; /* Read; ok */  
+ p[666] = 42; /* Write; ok */  
  
+ /* Mark the buffer read&#8208;only. */  
+ if (mprotect(p, 1024, PROT_READ)) {  
+ perror("Couldn’t mprotect");  
+ exit(errno);  
+ }  
  
-The memory cannot be accessed.  
+ c = p[[666]; /* Read; ok */  
+ p[[666] = 42; /* Write; program dies on SIGSEGV */  
  
+ exit(0);  
+ }  
  
-__EACCES__  
-  
-  
-The memory cannot be given the specified access. This can  
-happen, for example, if you mmap(2) a file to which  
-you have read-only access, then ask __mprotect__ to mark  
-it __PROT_WRITE__.  
-  
-  
-__ENOMEM__  
-  
-  
-Internal kernel structures could not be  
-allocated.  
-!!EXAMPLE  
-  
-  
-#include  
 !!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 says that  
+__mprotect__ can be used only on regions of memory obtained from mmap(2).  
  
-  
-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 says that  
-__mprotect__ can be used only on regions of memory  
-obtained from mmap(2).  
 !!SEE ALSO 
-  
-  
 mmap(2) 
-----  
This page is a man page (or other imported legacy content). We are unable to automatically determine the license status of this page.