# mprotect

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           mprotect — set protection of memory mapping
    


## SYNOPSIS



           #include <sys/mman.h>
    
           int mprotect(void *_addr_ , size_t _len_ , int _prot_);
    


## DESCRIPTION



           The _mprotect_() function shall change the access protections to be
           that specified by _prot_ for those whole pages containing any part
           of the address space of the process starting at address _addr_ and
           continuing for _len_ bytes. The parameter _prot_ determines whether
           read, write, execute, or some combination of accesses are
           permitted to the data being mapped. The _prot_ argument should be
           either PROT_NONE or the bitwise-inclusive OR of one or more of
           PROT_READ, PROT_WRITE, and PROT_EXEC.
    
           If an implementation cannot support the combination of access
           types specified by _prot_ , the call to _mprotect_() shall fail.
    
           An implementation may permit accesses other than those specified
           by _prot_ ; however, no implementation shall permit a write to
           succeed where PROT_WRITE has not been set or shall permit any
           access where PROT_NONE alone has been set. Implementations shall
           support at least the following values of _prot_ : PROT_NONE,
           PROT_READ, PROT_WRITE, and the bitwise-inclusive OR of PROT_READ
           and PROT_WRITE. If PROT_WRITE is specified, the application shall
           ensure that it has opened the mapped objects in the specified
           address range with write permission, unless MAP_PRIVATE was
           specified in the original mapping, regardless of whether the file
           descriptors used to map the objects have since been closed.
    
           The implementation may require that _addr_ be a multiple of the page
           size as returned by _sysconf_().
    
           The behavior of this function is unspecified if the mapping was
           not established by a call to _mmap_().
    
           When _mprotect_() fails for reasons other than **[EINVAL]** , the
           protections on some of the pages in the range [_addr_ ,_addr_ +_len_) may
           have been changed.
    


## RETURN VALUE



           Upon successful completion, _mprotect_() shall return 0; otherwise,
           it shall return -1 and set _errno_ to indicate the error.
    


## ERRORS



           The _mprotect_() function shall fail if:
    
           **EACCES** The _prot_ argument specifies a protection that violates the
                  access permission the process has to the underlying memory
                  object.
    
           **EAGAIN** The _prot_ argument specifies PROT_WRITE over a MAP_PRIVATE
                  mapping and there are insufficient memory resources to
                  reserve for locking the private page.
    
           **ENOMEM** Addresses in the range [_addr_ ,_addr_ +_len_) are invalid for the
                  address space of a process, or specify one or more pages
                  which are not mapped.
    
           **ENOMEM** The _prot_ argument specifies PROT_WRITE on a MAP_PRIVATE
                  mapping, and it would require more space than the system is
                  able to supply for locking the private pages, if required.
    
           **ENOTSUP**
                  The implementation does not support the combination of
                  accesses requested in the _prot_ argument.
    
           The _mprotect_() function may fail if:
    
           **EINVAL** The _addr_ argument is not a multiple of the page size as
                  returned by _sysconf_().
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           Most implementations require that _addr_ is a multiple of the page
           size as returned by _sysconf_().
    


## RATIONALE



           None.
    


## FUTURE DIRECTIONS



           None.
    


* * *