From 9db8ca91f920b9aba40ed68de6b8da0ca9dbefaa Mon Sep 17 00:00:00 2001 From: Kiryl Shutsemau Date: Tue, 26 May 2026 14:41:45 +0100 Subject: [PATCH] man/man2const/UFFDIO_RWPROTECT.2const: New page Document the UFFDIO_RWPROTECT ioctl (since Linux 7.2). It installs or removes read-write protection on a range that was registered with UFFDIO_REGISTER_MODE_RWP, and is also how a handler resolves an UFFD_PAGEFAULT_FLAG_RWP notification. Cover the two mode bits (UFFDIO_RWPROTECT_MODE_RWP and UFFDIO_RWPROTECT_MODE_DONTWAKE, mutually exclusive), the populated- pages-only semantics, the anon vs file-backed reclaim behaviour, the explicit-drop list (MADV_DONTNEED, hole-punch, truncation), and the EINVAL/EAGAIN/ENOENT/EFAULT errors returned by the kernel. Acked-by: Mike Rapoport (Microsoft) Signed-off-by: Kiryl Shutsemau Message-ID: <20260526134149.2831720-3-kirill@shutemov.name> [alx: ffix] Signed-off-by: Alejandro Colomar --- man/man2const/UFFDIO_RWPROTECT.2const | 122 ++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 man/man2const/UFFDIO_RWPROTECT.2const diff --git a/man/man2const/UFFDIO_RWPROTECT.2const b/man/man2const/UFFDIO_RWPROTECT.2const new file mode 100644 index 000000000..918605dbd --- /dev/null +++ b/man/man2const/UFFDIO_RWPROTECT.2const @@ -0,0 +1,122 @@ +.\" Copyright, the authors of the Linux man-pages project +.\" +.\" SPDX-License-Identifier: Linux-man-pages-copyleft +.\" +.TH UFFDIO_RWPROTECT 2const (date) "Linux man-pages (unreleased)" +.SH NAME +UFFDIO_RWPROTECT +\- +read-write-protect or un-protect a userfaultfd-registered memory range +.SH LIBRARY +Standard C library +.RI ( libc ,\~ \-lc ) +.SH SYNOPSIS +.nf +.BR "#include " " /* Definition of " UFFD* " constants */" +.B #include +.P +.BI "int ioctl(int " fd ", UFFDIO_RWPROTECT, struct uffdio_rwprotect *" argp ); +.P +.B #include +.P +.fi +.EX +.B struct uffdio_rwprotect { +.BR " struct uffdio_range range;" " /* Range to change RWP on */" +.BR " __u64 mode;" " /* Mode flags */" +.B }; +.EE +.SH DESCRIPTION +Read-write-protect or un-protect a userfaultfd-registered memory range +registered with mode +.BR UFFDIO_REGISTER_MODE_RWP . +.P +The following mode bits are supported: +.TP +.B UFFDIO_RWPROTECT_MODE_RWP +When this mode bit is set, +the ioctl installs read-write protection +on every page present in the range specified by +.IR .range . +Otherwise the ioctl removes read-write protection from the range, +which is also how a fault handler resolves an +.B UFFD_PAGEFAULT_FLAG_RWP +notification. +.TP +.B UFFDIO_RWPROTECT_MODE_DONTWAKE +When this mode bit is set, +do not wake up any thread +that waits for page-fault resolution after the operation. +This can be specified only if +.B UFFDIO_RWPROTECT_MODE_RWP +is not specified. +.P +Read-write protection only affects pages +that are currently populated in the range; +unmapped addresses are left untouched. +For anonymous mappings, +protection is preserved across page reclaim +(the marker rides on the swap entry) +and migration. +For shmem and file-backed mappings, +protection is dropped when the backing page is reclaimed. +Callers must also re-arm a range with +.B UFFDIO_RWPROTECT +after any operation that explicitly drops the underlying page: +.B MADV_DONTNEED +on anonymous memory, +hole-punch on shmem, +truncation of a file mapping. +.SH RETURN VALUE +On success, +0 is returned. +On error, \-1 is returned and +.I errno +is set to indicate the error. +.SH ERRORS +.TP +.B EINVAL +The +.I start +or the +.I len +field of the +.I uffdio_range +structure was not a multiple of the system page size, +or +.I len +was zero, +or the specified range was otherwise invalid, +or an invalid mode bit was specified, +or +.B UFFDIO_RWPROTECT_MODE_DONTWAKE +was specified together with +.BR UFFDIO_RWPROTECT_MODE_RWP . +.TP +.B EAGAIN +The process was interrupted; +retry this call. +.TP +.B ENOENT +The range specified in +.I .range +is not valid; +for example, the virtual address does not exist, +or part of the range is not registered with +.BR UFFDIO_REGISTER_MODE_RWP . +.TP +.B EFAULT +Encountered a generic fault during processing. +.SH STANDARDS +Linux. +.SH HISTORY +Linux 7.2. +.SH EXAMPLES +See +.BR userfaultfd (2). +.SH SEE ALSO +.BR ioctl (2), +.BR ioctl_userfaultfd (2), +.BR userfaultfd (2) +.P +.I linux.git/\:Documentation/\:admin\-guide/\:mm/\:userfaultfd.rst -- 2.47.3