Message ID | 20240626130513.120193-3-audra@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v3,1/3] Fix userfaultfd_api to return EINVAL as expected | expand |
On Wed, Jun 26, 2024 at 09:05:13AM -0400, Audra Mitchell wrote: > If CONFIG_PTE_MARKER_UFFD_WP is disabled, then we turn off three features > in userfaultfd_api (UFFD_FEATURE_WP_HUGETLBFS_SHMEM, > UFFD_FEATURE_WP_UNPOPULATED, and UFFD_FEATURE_WP_ASYNC). Currently this > test always will call uffdio_regsiter with the flag > UFFDIO_REGISTER_MODE_WP. However, the kernel ensures in vma_can_userfault > that if the feature UFFD_FEATURE_WP_HUGETLBFS_SHMEM is disabled, only > allow the VM_UFFD_WP on anonymous vmas, meaning our call to > uffdio_regsiter will fail. We still want to be able to run the test even > if we have CONFIG_PTE_MARKER_UFFD_WP disabled, so check to see if the > feature UFFD_FEATURE_WP_HUGETLBFS_SHMEM has been turned off in the test > and if so, disable us from calling uffdio_regsiter with the flag > UFFDIO_REGISTER_MODE_WP. > > Signed-off-by: Audra Mitchell <audra@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> > --- > tools/testing/selftests/mm/uffd-stress.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selftests/mm/uffd-stress.c > index b9b6d858eab8..3266ae885f75 100644 > --- a/tools/testing/selftests/mm/uffd-stress.c > +++ b/tools/testing/selftests/mm/uffd-stress.c > @@ -419,6 +419,9 @@ static void parse_test_type_arg(const char *raw_type) > test_uffdio_wp = test_uffdio_wp && > (features & UFFD_FEATURE_PAGEFAULT_FLAG_WP); > > + if (test_type != TEST_ANON && !(features & UFFD_FEATURE_WP_HUGETLBFS_SHMEM)) > + test_uffdio_wp = false; > + > close(uffd); > uffd = -1; > } > -- > 2.44.0 >
diff --git a/tools/testing/selftests/mm/uffd-stress.c b/tools/testing/selftests/mm/uffd-stress.c index b9b6d858eab8..3266ae885f75 100644 --- a/tools/testing/selftests/mm/uffd-stress.c +++ b/tools/testing/selftests/mm/uffd-stress.c @@ -419,6 +419,9 @@ static void parse_test_type_arg(const char *raw_type) test_uffdio_wp = test_uffdio_wp && (features & UFFD_FEATURE_PAGEFAULT_FLAG_WP); + if (test_type != TEST_ANON && !(features & UFFD_FEATURE_WP_HUGETLBFS_SHMEM)) + test_uffdio_wp = false; + close(uffd); uffd = -1; }
If CONFIG_PTE_MARKER_UFFD_WP is disabled, then we turn off three features in userfaultfd_api (UFFD_FEATURE_WP_HUGETLBFS_SHMEM, UFFD_FEATURE_WP_UNPOPULATED, and UFFD_FEATURE_WP_ASYNC). Currently this test always will call uffdio_regsiter with the flag UFFDIO_REGISTER_MODE_WP. However, the kernel ensures in vma_can_userfault that if the feature UFFD_FEATURE_WP_HUGETLBFS_SHMEM is disabled, only allow the VM_UFFD_WP on anonymous vmas, meaning our call to uffdio_regsiter will fail. We still want to be able to run the test even if we have CONFIG_PTE_MARKER_UFFD_WP disabled, so check to see if the feature UFFD_FEATURE_WP_HUGETLBFS_SHMEM has been turned off in the test and if so, disable us from calling uffdio_regsiter with the flag UFFDIO_REGISTER_MODE_WP. Signed-off-by: Audra Mitchell <audra@redhat.com> --- tools/testing/selftests/mm/uffd-stress.c | 3 +++ 1 file changed, 3 insertions(+)