mprotect man page on CentOS

Man page or keyword search:  
man Server   8420 pages
apropos Keyword Search (all sections)
Output format
CentOS logo
[printable version]

MPROTECT(2)		   Linux Programmer's Manual		   MPROTECT(2)

NAME
       mprotect - control allowable accesses to a region of memory

SYNOPSIS
       #include <sys/mman.h>

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

DESCRIPTION
       The function mprotect() specifies the desired protection for the memory
       page(s) containing part or all of the interval  [addr,addr+len-1].   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
       On success, mprotect() returns zero.  On error,	-1  is	returned,  and
       errno is set appropriately.

ERRORS
       EACCES The  memory cannot be given the specified access.	 This can hap‐
	      pen, for example, if you mmap(2) a file to which you have	 read-
	      only access, then ask mprotect() to mark it PROT_WRITE.

       EFAULT The memory cannot be accessed.

       EINVAL addr is not a valid pointer, or not a multiple of PAGESIZE.

       ENOMEM Internal	 kernel	  structures  could  not  be  allocated.   Or:
	      addresses	 in the range [addr, addr+len]	are  invalid  for  the
	      address  space of the process, or specify one or more pages that
	      are not mapped.

EXAMPLE
       #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
       SVr4, POSIX.1-2001.  POSIX says that mprotect() can  be	used  only  on
       regions of memory obtained from mmap(2).

NOTES
       On  Linux  it  is  always  legal to call mprotect() on any address in a
       process' address space (except for the kernel vsyscall area).  In  par‐
       ticular it can be used to change existing code mappings to be writable.

       Whether	PROT_EXEC has any effect different from PROT_READ is architec‐
       ture and kernel version dependent.

SEE ALSO
       mmap(2)

Linux 2.4			  2003-08-24			   MPROTECT(2)
[top]

List of man pages available for CentOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net