Change memory protection
Synopsis:
#include <sys/mman.h>
int mprotect( void * addr, 
              size_t len,
              int prot );
 
Arguments:
- addr
 
- The beginning of the range of addresses whose protection you want to change.
 
- len
 
- The length of the range of addresses, in bytes.
 
- prot
 
- The new access capabilities for the mapped memory region(s). 
  You can combine the following bits, which are defined in 
  <sys/mman.h>:
  
  - PROT_EXEC — the region can be executed.
    
    
Note: 
    In order to successfully use this flag:
    
    - Your process must have the PROCMGR_AID_PROT_EXEC ability enabled.
      
    
 
    - If the calling process has any privileged abilities enabled,
      then any memory-mapped files in the region must be from a trusted filesystem.
      For more information about trusted filesystems, see
      pathtrust
      in the Utilities Reference.
    
 
    
    
    For more information about abilities, see
    procmgr_ability().
    
     
   
  - PROT_NOCACHE — disable caching of the region
    (for example, to access dual ported memory).
    
  
 
  - PROT_NONE — the region can't be accessed.
    
  
 
  - PROT_READ — the region can be read.
    
  
 
  - PROT_WRITE — the region can be written.
    
  
 
  
 
 
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
 
Description:
The mprotect() function changes the access protections on any
mappings residing in the range starting at addr, and
continuing for len bytes.
 
Returns:
- 0
 
- Success.
 
- -1
 
- An error occurred
  (errno is set).
 
Note: 
If mprotect() fails,
the protections on some of the pages in the address range 
starting at addr and continuing for len bytes may have been changed.
 
Errors:
- EACCES
 
- One of the following occurred:
  
  - The memory object wasn't opened for read, regardless of the protection specified.
 
  - The memory object wasn't opened for write, and you specified PROT_WRITE
    for a MAP_SHARED type mapping.
  
 
  - You specified PROT_EXEC for a memory-mapped file mapping,
    the file doesn't have execute permission for the client process, and
    procnto was started with the -mX option.
  
 
  
 
- EAGAIN 
 
- The prot argument specifies PROT_WRITE on a
  MAP_PRIVATE mapping, and there's insufficient memory
  resources to reserve for locking the private pages (if required).
 
- ENOMEM
 
- The addresses in the range starting at addr and continuing
  for len bytes are outside the range allowed for the address
  space of a process, or specify one or more pages that are not mapped.
  
  The prot argument specifies PROT_WRITE on a
  MAP_PRIVATE mapping, and locking the private pages (if
  required) would need more space than the system can supply to reserve for doing so.
  
 
- ENOSYS
 
- The function mprotect() isn't supported by this implementation.
 
- EPERM
 
- The calling process doesn't have the required permission (see
  procmgr_ability()),
  or it attempted to set PROT_EXEC for a region of memory covered by
  an untrusted memory-mapped file.
 
 
Classification:
POSIX 1003.1
| Safety: | 
  | 
| Cancellation point | 
No | 
| Interrupt handler | 
No | 
| Signal handler | 
Yes | 
| Thread | 
Yes |