[ Bottom of Page | Previous Page | Next Page | Contents | Index | Library Home | Legal | Search ]

Technical Reference: Base Operating System and Extensions, Volume 1

mprotect Subroutine

Purpose

Modifies access protections for memory mapping.

Library

Standard C Library (libc.a)

Syntax

#include <sys/types.h>
#include <sys/mman.h>


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

Description

The mprotect subroutine modifies the access protection of a mapped file region or anonymous memory region created by the mmap subroutine. The behavior of this function is unspecified if the mapping was not established by a call to the mmap subroutine.

Parameters

addr
Specifies the address of the region to be modified. Must be a multiple of the page size returned by the sysconf subroutine using the _SC_PAGE_SIZE value for the Name parameter.
len
Specifies the length, in bytes, of the region to be modified. If the len parameter is not a multiple of the page size returned by the sysconf subroutine using the _SC_PAGE_SIZE value for the Name parameter, the length of the region will be rounded off to the next multiple of the page size.
prot
Specifies the new access permissions for the mapped region. Legitimate values for the prot parameter are the same as those permitted for the mmap (mmap or mmap64 Subroutine) subroutine, as follows:
PROT_READ
Region can be read.
PROT_WRITE
Region can be written.
PROT_EXEC
Region can be executed.
PROT_NONE
Region cannot be accessed.
 

Return Values

When successful, the mprotect subroutine returns 0. Otherwise, it returns -1 and sets the errno global variable to indicate the error.

Note
The return value for mprotect is 0 if it fails because the region given was not created by mmap unless XPG 1170 behavior is requested by setting the environment variable XPG_SUS_ENV to ON.

Error Codes

Attention: If the mprotect subroutine is unsuccessful because of a condition other than that specified by the EINVAL error code, the access protection for some pages in the (addr, addr + len) range may have been changed.

If the mprotect subroutine is unsuccessful, the errno global variable may be set to one of the following values:

EACCES The prot parameter specifies a protection that conflicts with the access permission set for the underlying file.
EINVAL The prot parameter is not valid, or the addr parameter is not a multiple of the page size as returned by the sysconf subroutine using the _SC_PAGE_SIZE value for the Name parameter.
ENOMEM The application has requested Single UNIX Specification, Version 2 compliant behavior and addresses in the range are invalid for the address space of the process or specify one or more pages which are not mapped.

[ Top of Page | Previous Page | Next Page | Contents | Index | Library Home | Legal | Search ]