mirror of https://github.com/mkerrisk/man-pages
ioctl_userfaultfd.2: Add write-protect mode docs
Userfaultfd write-protect mode is supported starting from Linux 5.7. Acked-by: Mike Rapoport <rppt@linux.vnet.ibm.com> Signed-off-by: Peter Xu <peterx@redhat.com> [alx: ffix + srcfix] Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com> Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
fbda69bbdd
commit
f559fa36a6
|
@ -234,6 +234,11 @@ operation is supported.
|
|||
The
|
||||
.B UFFDIO_UNREGISTER
|
||||
operation is supported.
|
||||
.TP
|
||||
.B 1 << _UFFDIO_WRITEPROTECT
|
||||
The
|
||||
.B UFFDIO_WRITEPROTECT
|
||||
operation is supported.
|
||||
.PP
|
||||
This
|
||||
.BR ioctl (2)
|
||||
|
@ -322,9 +327,6 @@ Track page faults on missing pages.
|
|||
.B UFFDIO_REGISTER_MODE_WP
|
||||
Track page faults on write-protected pages.
|
||||
.PP
|
||||
Currently, the only supported mode is
|
||||
.BR UFFDIO_REGISTER_MODE_MISSING .
|
||||
.PP
|
||||
If the operation is successful, the kernel modifies the
|
||||
.I ioctls
|
||||
bit-mask field to indicate which
|
||||
|
@ -443,6 +445,16 @@ operation:
|
|||
.TP
|
||||
.B UFFDIO_COPY_MODE_DONTWAKE
|
||||
Do not wake up the thread that waits for page-fault resolution
|
||||
.TP
|
||||
.B UFFDIO_COPY_MODE_WP
|
||||
Copy the page with read-only permission.
|
||||
This allows the user to trap the next write to the page,
|
||||
which will block and generate another write-protect userfault message.
|
||||
This is only used when both
|
||||
.B UFFDIO_REGISTER_MODE_MISSING
|
||||
and
|
||||
.B UFFDIO_REGISTER_MODE_WP
|
||||
modes are enabled for the registered range.
|
||||
.PP
|
||||
The
|
||||
.I copy
|
||||
|
@ -654,6 +666,74 @@ field of the
|
|||
structure was not a multiple of the system page size; or
|
||||
.I len
|
||||
was zero; or the specified range was otherwise invalid.
|
||||
.SS UFFDIO_WRITEPROTECT (Since Linux 5.7)
|
||||
Write-protect or write-unprotect an userfaultfd registered memory range
|
||||
registered with mode
|
||||
.BR UFFDIO_REGISTER_MODE_WP .
|
||||
.PP
|
||||
The
|
||||
.I argp
|
||||
argument is a pointer to a
|
||||
.I uffdio_range
|
||||
structure as shown below:
|
||||
.PP
|
||||
.in +4n
|
||||
.EX
|
||||
struct uffdio_writeprotect {
|
||||
struct uffdio_range range; /* Range to change write permission*/
|
||||
__u64 mode; /* Mode to change write permission */
|
||||
};
|
||||
.EE
|
||||
.in
|
||||
.PP
|
||||
There're two mode bits that are supported in this structure:
|
||||
.TP
|
||||
.B UFFDIO_WRITEPROTECT_MODE_WP
|
||||
When this mode bit is set,
|
||||
the ioctl will be a write-protect operation upon the memory range specified by
|
||||
.IR range .
|
||||
Otherwise it'll be a write-unprotect operation upon the specified range,
|
||||
which can be used to resolve an userfaultfd write-protect page fault.
|
||||
.TP
|
||||
.B UFFDIO_WRITEPROTECT_MODE_DONTWAKE
|
||||
When this mode bit is set,
|
||||
do not wake up any thread that waits for
|
||||
page-fault resolution after the operation.
|
||||
This could only be specified if
|
||||
.B UFFDIO_WRITEPROTECT_MODE_WP
|
||||
is not specified.
|
||||
.PP
|
||||
This
|
||||
.BR ioctl (2)
|
||||
operation returns 0 on success.
|
||||
On error, \-1 is returned and
|
||||
.I errno
|
||||
is set to indicate the error.
|
||||
Possible errors include:
|
||||
.TP
|
||||
.B EINVAL
|
||||
The
|
||||
.I start
|
||||
or the
|
||||
.I len
|
||||
field of the
|
||||
.I ufdio_range
|
||||
structure was not a multiple of the system page size; or
|
||||
.I len
|
||||
was zero; or the specified range was otherwise invalid.
|
||||
.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 not registered with userfaultfd write-protect mode.
|
||||
.TP
|
||||
.B EFAULT
|
||||
Encountered a generic fault during processing.
|
||||
.SH RETURN VALUE
|
||||
See descriptions of the individual operations, above.
|
||||
.SH ERRORS
|
||||
|
|
Loading…
Reference in New Issue