Added Uffd::read_events that can read multiple events from the userfaultfd file descriptor.
Updated bitflags dependency to 2.2.1.
Use /dev/userfaultfd as the default API for creating userfaultfd file descriptors.
Since Linux 5.11 a process can select if it wants to handle page faults triggered in kernel space or not. Under this mechanism, processes that wish to handle those, need to have CAP_SYS_PTRACE capability. CAP_SYS_PTRACE allows a process to do much more than create userfault fds, so with 6.1 Linux introduces /dev/userfaultfd, a special character device that allows creating userfault file descriptors using the USERFAULTFD_IOC_NEW ioctl. Access to this device is granted via file system permissions and does not require CAP_SYS_PTRACE to handle kernel triggered page faults.
We now default to using /dev/userfaultfd for creating the descriptors and only if that file is not present, we fall back to using the syscall.
UFFD_FEATURE_THREAD_ID flag when compiled with the linux4_14 Cargo feature.bindgen dependency of userfaultfd-sys to 0.57. Thank you @jgowansReadWrite public. Thank you @electroCutieRemoved the compile-time Linux version check, and replaced it with a Cargo feature.
The Linux version check was overly restrictive, even on systems that did have the right kernel version installed but had older headers in /usr/include/linux. Beyond that, this check made it more difficult to compile on a different host than what's targeted.
There is now a linux4_14 feature flag on userfaultfd-sys, which turns on and tests the extra constants available in that version. Since userfaultfd did not make use of any of those newer features, it doesn't have a feature flag yet.
Applications should take care when initializing with UffdBuilder to specify the features and ioctls they require, so that an unsupported version will be detected at runtime.