---
name: "PR_SET_MDWE"
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_MDWE"
---

# PR\_SET\_MDWE(2const)

set the Memory-Deny-Write-Execute protection mask for the calling process

## NAME

PR\_SET\_MDWE - set the Memory-Deny-Write-Execute protection mask for the calling process

## LIBRARY

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

## SYNOPSIS

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

**int prctl(PR\_SET\_MDWE, unsigned long** *mask***, 0L, 0L, 0L);**

## DESCRIPTION

Set the calling process' Memory-Deny-Write-Execute protection mask. Once protection bits are set, they can not be changed.

*mask* must be a bit mask of:

- **PR\_MDWE\_REFUSE\_EXEC\_GAIN**

  New memory mappings can't be writable and executable. Non-executable mappings can't become executable.

- **PR\_MDWE\_NO\_INHERIT (since Linux 6.6)**

  Do not propagate MDWE protection to child processes on [**fork**(2)](/fork/2.md). Setting this bit requires setting **PR\_MDWE\_REFUSE\_EXEC\_GAIN** too.

## RETURN VALUE

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

## ERRORS

- **EINVAL**

  *mask* is not a valid value.

## STANDARDS

Linux.

## HISTORY

Linux 6.3.

## SEE ALSO

[**prctl**(2)](/prctl/2.md), [**PR\_GET\_MDWE**(2const)](/PR_GET_MDWE/2const.md)
