*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Linux man pages -> mprotect (2)              
Title
Content
Arch
Section
 

MPROTECT(2)

Contents


NAME    [Toc]    [Back]

       mprotect - control allowable accesses to a region of memory

SYNOPSIS    [Toc]    [Back]

       #include <sys/mman.h>

       int mprotect(const void *addr, size_t len, int prot);

DESCRIPTION    [Toc]    [Back]

       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.

       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    [Toc]    [Back]

       On success, mprotect returns zero.  On error, -1 is returned, and errno
       is set appropriately.

ERRORS    [Toc]    [Back]

       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 readonly
 access, then ask mprotect to mark it PROT_WRITE.

       ENOMEM Internal kernel structures could not be allocated.

EXAMPLE    [Toc]    [Back]

       #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);
       }

CONFORMING TO    [Toc]    [Back]

       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    [Toc]    [Back]

      
      
       mmap(2)



Linux 2.0			  1997-05-31			   MPROTECT(2)
[ Back ]
 Similar pages
Name OS Title
XmTextFieldGetMaxLength Tru64 A TextField function that accesses the value of the current maximum allowable length of a text strin...
XmTextFieldGetMaxLength HP-UX A TextField function that accesses the value of the current maximum allowable length of a text string entered
XmTextFieldGetMaxLength IRIX A TextField function that accesses the value of the current maximum allowable length of a text string entered
XmTextGetMaxLength Tru64 A Text function that accesses the value of the current maximum allowable length of a text string ent...
XmTextGetMaxLength IRIX A Text function that accesses the value of the current maximum allowable length of a text string entered from
XmTextGetMaxLength HP-UX A Text function that accesses the value of the current maximum allowable length of a text string entered from
shmat Tru64 Attach a shared memory region
shmid_ds Tru64 Defines a shared memory region
shmdt Tru64 Detach a shared memory region
mvalid Tru64 Check memory region for validity
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service