---
name: "PR_SET_MM"
section: "2const"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/PR_SET_MM"
---

# PR\_SET\_MM(2const)

modify kernel memory map descriptor fields

## NAME

PR\_SET\_MM - modify kernel memory map descriptor fields

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <linux/prctl.h>  /* Definition of PR_* constants */
#include <sys/prctl.h>
```

**int prctl(PR\_SET\_MM, long** *op***, ...);**

## DESCRIPTION

Modify certain kernel memory map descriptor fields of the calling process. Usually these fields are set by the kernel and dynamic loader (see [**ld.so**(8)](/ld.so/8.md) for more information) and a regular application should not use this feature. However, there are cases, such as self-modifying programs, where a program might find it useful to change its own memory map.

The calling process must have the **CAP\_SYS\_RESOURCE** capability. The value in *op* is one of the options below.

- **PR\_SET\_MM\_START\_CODE** **PR\_SET\_MM\_END\_CODE** **PR\_SET\_MM\_START\_DATA** **PR\_SET\_MM\_END\_DATA** **PR\_SET\_MM\_START\_STACK** **PR\_SET\_MM\_START\_BRK** **PR\_SET\_MM\_BRK** **PR\_SET\_MM\_ARG\_START** **PR\_SET\_MM\_ARG\_END** **PR\_SET\_MM\_ENV\_START** **PR\_SET\_MM\_ENV\_END** **PR\_SET\_MM\_AUXV** **PR\_SET\_MM\_EXE\_FILE** **PR\_SET\_MM\_MAP** **PR\_SET\_MM\_MAP\_SIZE**

  ## RETURN VALUE

On success, 0 is returned. On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EINVAL**

  *op* is not a valid value.

- **EPERM**

  The caller does not have the **CAP\_SYS\_RESOURCE** capability.

## STANDARDS

Linux.

## HISTORY

Linux 3.3.

Before Linux 3.10, this feature is available only if the kernel is built with the **CONFIG\_CHECKPOINT\_RESTORE** option enabled.

## SEE ALSO

[**prctl**(2)](/prctl/2.md), [**PR\_SET\_MM\_START\_CODE**(2const)](/PR_SET_MM_START_CODE/2const.md), [**PR\_SET\_MM\_END\_CODE**(2const)](/PR_SET_MM_END_CODE/2const.md), [**PR\_SET\_MM\_START\_DATA**(2const)](/PR_SET_MM_START_DATA/2const.md), [**PR\_SET\_MM\_END\_DATA**(2const)](/PR_SET_MM_END_DATA/2const.md), [**PR\_SET\_MM\_START\_STACK**(2const)](/PR_SET_MM_START_STACK/2const.md), [**PR\_SET\_MM\_START\_BRK**(2const)](/PR_SET_MM_START_BRK/2const.md), [**PR\_SET\_MM\_BRK**(2const)](/PR_SET_MM_BRK/2const.md), [**PR\_SET\_MM\_ARG\_START**(2const)](/PR_SET_MM_ARG_START/2const.md), [**PR\_SET\_MM\_ARG\_END**(2const)](/PR_SET_MM_ARG_END/2const.md), [**PR\_SET\_MM\_ENV\_START**(2const)](/PR_SET_MM_ENV_START/2const.md), [**PR\_SET\_MM\_ENV\_END**(2const)](/PR_SET_MM_ENV_END/2const.md), [**PR\_SET\_MM\_EXE\_FILE**(2const)](/PR_SET_MM_EXE_FILE/2const.md), [**PR\_SET\_MM\_MAP**(2const)](/PR_SET_MM_MAP/2const.md), [**PR\_SET\_MM\_MAP\_SIZE**(2const)](/PR_SET_MM_MAP_SIZE/2const.md)
