Skip to contentSkip to conversation

kunit/usercopy: Disable testing on !CONFIG_MMU

PATCH In review Kees Cook 4 participants 6 messages Jun 19, 2024 – Jul 2, 2024

Subsystems (5)
lore
Share & tools
lore

Kees Cook

author
#0 lore raw

PATCH v2 1/1 kunit/usercopy: Disable testing on !CONFIG_MMU

Since arch_pick_mmap_layout() is an inline for non-MMU systems, disable this test there.

---
Resending as v2 with Shuah in To:
---
Cc: Shuah Khan <[email protected]>
Cc: Brendan Higgins <[email protected]>
Cc: David Gow <[email protected]>
Cc: Rae Moar <[email protected]>
Cc: "Gustavo A. R. Silva" <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]

---
 lib/kunit/user_alloc.c | 4 ++++
 lib/usercopy_kunit.c   | 5 +++++
 mm/util.c              | 2 ++
 3 files changed, 11 insertions(+)
lib/kunit/user_alloc.c +4 -0
index 76d3d1345ed7..ae935df09a5e 100644
@@ -30,6 +30,10 @@ static int kunit_attach_mm(void)
 	if (current->mm)
 		return 0;
 
+	/* arch_pick_mmap_layout() is only sane with MMU systems. */
+	if (!IS_ENABLED(CONFIG_MMU))
+		return -EINVAL;
+
 	mm = mm_alloc();
 	if (!mm)
 		return -ENOMEM;
lib/usercopy_kunit.c +5 -0
index 45f1e558c464..e819561a540d 100644
@@ -290,6 +290,11 @@ static int usercopy_test_init(struct kunit *test)
 	struct usercopy_test_priv *priv;
 	unsigned long user_addr;
 
+	if (!IS_ENABLED(CONFIG_MMU)) {
+		kunit_skip(test, "Userspace allocation testing not available on non-MMU systems");
+		return 0;
+	}
+
 	priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);
 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv);
 	test->priv = priv;
mm/util.c +2 -0
index df37c47d9374..e70e8e439258 100644
@@ -484,7 +484,9 @@ void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
 	clear_bit(MMF_TOPDOWN, &mm->flags);
 }
 #endif
+#ifdef CONFIG_MMU
 EXPORT_SYMBOL_IF_KUNIT(arch_pick_mmap_layout);
+#endif
 
 /**
  * __account_locked_vm - account locked pages to an mm's locked_vm
Signature · 1 line
2.34.1
Reviewed-by on v2 1/1
#1 lore raw
Quoted 7 lines · Kees Cook

Since arch_pick_mmap_layout() is an inline for non-MMU systems, disable this test there.

Hello!

This looks good to me. And seems to fix the problem. Thanks for the fix!

-Rae

Quoted 67 lines

---
Resending as v2 with Shuah in To:
---
Cc: Shuah Khan <[email protected]>
Cc: Brendan Higgins <[email protected]>
Cc: David Gow <[email protected]>
Cc: Rae Moar <[email protected]>
Cc: "Gustavo A. R. Silva" <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]

---
 lib/kunit/user_alloc.c | 4 ++++
 lib/usercopy_kunit.c   | 5 +++++
 mm/util.c              | 2 ++
 3 files changed, 11 insertions(+)
lib/kunit/user_alloc.c +4 -0
index 76d3d1345ed7..ae935df09a5e 100644
@@ -30,6 +30,10 @@ static int kunit_attach_mm(void)
        if (current->mm)
                return 0;
 
+       /* arch_pick_mmap_layout() is only sane with MMU systems. */
+       if (!IS_ENABLED(CONFIG_MMU))
+               return -EINVAL;
+
        mm = mm_alloc();
        if (!mm)
                return -ENOMEM;
lib/usercopy_kunit.c +5 -0
index 45f1e558c464..e819561a540d 100644
@@ -290,6 +290,11 @@ static int usercopy_test_init(struct kunit *test)
        struct usercopy_test_priv *priv;
        unsigned long user_addr;
 
+       if (!IS_ENABLED(CONFIG_MMU)) {
+               kunit_skip(test, "Userspace allocation testing not available on non-MMU systems");
+               return 0;
+       }
+
        priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv);
        test->priv = priv;
mm/util.c +2 -1
index df37c47d9374..e70e8e439258 100644
@@ -484,7 +484,9 @@ void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
        clear_bit(MMF_TOPDOWN, &mm->flags);
 }
 #endif
+#ifdef CONFIG_MMU
 EXPORT_SYMBOL_IF_KUNIT(arch_pick_mmap_layout);
+#endif
 
 /**
  * __account_locked_vm - account locked pages to an mm's locked_vm
--

2.34.1

author
#2 lore raw

Hi Shuah,

Can you please add this to your -next tree since it fixes test failures on non-MMU systems, after commit cf6219ee889f ("usercopy: Convert test_user_copy to KUnit test").

Thanks!

-Kees

Quoted 84 lines · Rae Moar
Quoted 7 lines · Kees Cook

Since arch_pick_mmap_layout() is an inline for non-MMU systems, disable this test there.

Hello!

This looks good to me. And seems to fix the problem. Thanks for the fix!

-Rae

Quoted 67 lines

---
Resending as v2 with Shuah in To:
---
Cc: Shuah Khan <[email protected]>
Cc: Brendan Higgins <[email protected]>
Cc: David Gow <[email protected]>
Cc: Rae Moar <[email protected]>
Cc: "Gustavo A. R. Silva" <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]

---
 lib/kunit/user_alloc.c | 4 ++++
 lib/usercopy_kunit.c   | 5 +++++
 mm/util.c              | 2 ++
 3 files changed, 11 insertions(+)
lib/kunit/user_alloc.c +4 -0
index 76d3d1345ed7..ae935df09a5e 100644
@@ -30,6 +30,10 @@ static int kunit_attach_mm(void)
        if (current->mm)
                return 0;
 
+       /* arch_pick_mmap_layout() is only sane with MMU systems. */
+       if (!IS_ENABLED(CONFIG_MMU))
+               return -EINVAL;
+
        mm = mm_alloc();
        if (!mm)
                return -ENOMEM;
lib/usercopy_kunit.c +5 -0
index 45f1e558c464..e819561a540d 100644
@@ -290,6 +290,11 @@ static int usercopy_test_init(struct kunit *test)
        struct usercopy_test_priv *priv;
        unsigned long user_addr;
 
+       if (!IS_ENABLED(CONFIG_MMU)) {
+               kunit_skip(test, "Userspace allocation testing not available on non-MMU systems");
+               return 0;
+       }
+
        priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv);
        test->priv = priv;
mm/util.c +2 -1
index df37c47d9374..e70e8e439258 100644
@@ -484,7 +484,9 @@ void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
        clear_bit(MMF_TOPDOWN, &mm->flags);
 }
 #endif
+#ifdef CONFIG_MMU
 EXPORT_SYMBOL_IF_KUNIT(arch_pick_mmap_layout);
+#endif
 
 /**
  * __account_locked_vm - account locked pages to an mm's locked_vm
--

2.34.1

Signature · 1 line
Kees Cook
maintainer
#3 lore raw
Quoted 6 lines · Kees Cook

Hi Shuah,

Can you please add this to your -next tree since it fixes test failures on non-MMU systems, after commit cf6219ee889f ("usercopy: Convert test_user_copy to KUnit test").

Applied to linux-kselftest kunit branch for next.

thanks,
-- Shuah

Reviewed-by on v2 1/1
#4 lore raw
In reply to Kees Cook
Quoted 7 lines · Kees Cook

Since arch_pick_mmap_layout() is an inline for non-MMU systems, disable this test there.

Quoted 14 lines

---
Resending as v2 with Shuah in To:
---
Cc: Shuah Khan <[email protected]>
Cc: Brendan Higgins <[email protected]>
Cc: David Gow <[email protected]>
Cc: Rae Moar <[email protected]>
Cc: "Gustavo A. R. Silva" <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---

Cheers,
-- David

maintainer
#5 lore raw
Quoted 23 lines · David Gow
Quoted 7 lines · Kees Cook

Since arch_pick_mmap_layout() is an inline for non-MMU systems, disable this test there.

Quoted 14 lines

---
Resending as v2 with Shuah in To:
---
Cc: Shuah Khan <[email protected]>
Cc: Brendan Higgins <[email protected]>
Cc: David Gow <[email protected]>
Cc: Rae Moar <[email protected]>
Cc: "Gustavo A. R. Silva" <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---

Quoted 4 lines

Cheers,
-- David

Thank you both. Applied to linux-kselftest kunit branch for next.

thanks,
-- Shuah