userfaultfd: don't use unsupported feature am: 4a3ec628c0

Original change: https://android-review.googlesource.com/c/platform/external/linux-kselftest/+/2169802

Change-Id: I74c579a9cc598988bc397162b6e4051fc94bcf4f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/android/patches/0026-userfaultfd-don-t-use-unsupported-feature.patch b/android/patches/0026-userfaultfd-don-t-use-unsupported-feature.patch
new file mode 100644
index 0000000..9651389
--- /dev/null
+++ b/android/patches/0026-userfaultfd-don-t-use-unsupported-feature.patch
@@ -0,0 +1,49 @@
+From 37d2454af92b6ac3a3f98503cf9393efa1564189 Mon Sep 17 00:00:00 2001
+From: Edward Liaw <edliaw@google.com>
+Date: Thu, 28 Jul 2022 00:26:52 +0000
+Subject: [PATCH] userfaultfd: don't use unsupported feature
+
+UFFD_FEATURE_PAGEFAULT_FLAG_WP was added in linux 5.7 and currently
+unsupported in Android >5.10.
+
+Bug: 234150821
+Test: atest vts_linux_kselftest_x86_64:vm_userfaultfd_anon_x86_64#vm_userfaultfd_anon_x86_64
+Test: atest vts_linux_kselftest_x86_64:vm_userfaultfd_shmem_x86_64#vm_userfaultfd_shmem_x86_64
+Signed-off-by: Edward Liaw <edliaw@google.com>
+Change-Id: Ice2a9d3e427f717037175e68d5e209063c6693ee
+---
+ tools/testing/selftests/vm/userfaultfd.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c
+index a38d5ac456d1a..d8ec4b0e4a4e0 100644
+--- a/tools/testing/selftests/vm/userfaultfd.c
++++ b/tools/testing/selftests/vm/userfaultfd.c
+@@ -1652,7 +1652,24 @@ unsigned long default_huge_page_size(void)
+ 
+ static void set_test_type(const char *type)
+ {
++	/* b/234150821
++	 * UFFD_FEATURE_PAGEFAULT_FLAG_WP unsupported in kernel <5.7
++	 */
++#ifdef __ANDROID__
++	uint64_t features = (
++			   UFFD_FEATURE_EVENT_FORK |		\
++			   UFFD_FEATURE_EVENT_REMAP |		\
++			   UFFD_FEATURE_EVENT_REMOVE |		\
++			   UFFD_FEATURE_EVENT_UNMAP |		\
++			   UFFD_FEATURE_MISSING_HUGETLBFS |	\
++			   UFFD_FEATURE_MISSING_SHMEM |		\
++			   UFFD_FEATURE_SIGBUS |		\
++			   UFFD_FEATURE_THREAD_ID |		\
++			   UFFD_FEATURE_MINOR_HUGETLBFS |	\
++			   UFFD_FEATURE_MINOR_SHMEM);
++#else
+ 	uint64_t features = UFFD_API_FEATURES;
++#endif
+ 
+ 	if (!strcmp(type, "anon")) {
+ 		test_type = TEST_ANON;
+-- 
+2.37.1.455.g008518b4e5-goog
+
diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c
index a38d5ac..d8ec4b0 100644
--- a/tools/testing/selftests/vm/userfaultfd.c
+++ b/tools/testing/selftests/vm/userfaultfd.c
@@ -1652,7 +1652,24 @@
 
 static void set_test_type(const char *type)
 {
+	/* b/234150821
+	 * UFFD_FEATURE_PAGEFAULT_FLAG_WP unsupported in kernel <5.7
+	 */
+#ifdef __ANDROID__
+	uint64_t features = (
+			   UFFD_FEATURE_EVENT_FORK |		\
+			   UFFD_FEATURE_EVENT_REMAP |		\
+			   UFFD_FEATURE_EVENT_REMOVE |		\
+			   UFFD_FEATURE_EVENT_UNMAP |		\
+			   UFFD_FEATURE_MISSING_HUGETLBFS |	\
+			   UFFD_FEATURE_MISSING_SHMEM |		\
+			   UFFD_FEATURE_SIGBUS |		\
+			   UFFD_FEATURE_THREAD_ID |		\
+			   UFFD_FEATURE_MINOR_HUGETLBFS |	\
+			   UFFD_FEATURE_MINOR_SHMEM);
+#else
 	uint64_t features = UFFD_API_FEATURES;
+#endif
 
 	if (!strcmp(type, "anon")) {
 		test_type = TEST_ANON;