This adds two flags to process_vm_readv/writev: - PROCESS_VM_PIDFD: refer to the remote process via PID file descriptor instead of PID. - PROCESS_VM_NOWAIT: do not block on IO if the memory access causes a page fault.
v2: https://lore.kernel.org/lkml/[email protected]/ v1: https://lore.kernel.org/lkml/[email protected]/ Sashiko review of v2: https://sashiko.dev/#/patchset/[email protected] Changes since v2: - Fix ERR_PTR handling for pidfd_get_task(): use IS_ERR()/PTR_ERR() for the pidfd path, matching process_madvise() (Usama Arif, Sashiko) - Add selftest for invalid pidfd (David Hildenbrand) - Add selftest for invalid pid - Remove hardcoded __NR_pidfd_open fallback, use <sys/syscall.h> (Sashiko) - SKIP pidfd tests on kernels without pidfd_open (ENOSYS) (Sashiko) - SKIP userfaultfd tests when unprivileged userfaultfd is disabled (EPERM) (Sashiko) - Fault in test_data before NOWAIT tests to ensure page is resident (Sashiko) - Add ksft_process_vm_readv.sh wrapper and run_vmtests.sh entry so the test runs in CI - Rebase onto v7.1-rc1 Not addressed: - uffd handler timeout causing test hang: kselftest_harness forks each test with a 30-second timeout, so an infinite hang cannot occur (Sashiko) - 64-bit process reading 32-bit process high addresses: pre-existing concern in the existing process_vm_readv code, not introduced by this patch (David Laight) Alban Crequy (2): mm/process_vm_access: pidfd and nowait support for process_vm_readv/writev selftests/mm: add tests for process_vm_readv flags MAINTAINERS | 1 + include/uapi/linux/process_vm.h | 9 + mm/process_vm_access.c | 34 +- tools/testing/selftests/mm/Makefile | 2 + .../selftests/mm/ksft_process_vm_readv.sh | 4 + tools/testing/selftests/mm/process_vm_readv.c | 421 ++++++++++++++++++ tools/testing/selftests/mm/run_vmtests.sh | 4 + 7 files changed, 466 insertions(+), 9 deletions(-) create mode 100644 include/uapi/linux/process_vm.h create mode 100755 tools/testing/selftests/mm/ksft_process_vm_readv.sh create mode 100644 tools/testing/selftests/mm/process_vm_readv.c -- 2.45.0

