[PATCH v2 8/8] selftests/mm: Check that no_mseal_sys_mappings unseals system mappings
Chris Down
chris at chrisdown.name
Tue Nov 3 07:19:10 PST 2026
Booting with no_mseal_sys_mappings currently makes check_sealed skip and
expect_sealed fail, so nothing checks that the parameter actually turns
sealing off.
So let's check /proc/cmdline for it, and when it's there, expect [vdso]
and the other system mappings to be unsealed rather than skipping or
failing. The vdso tests already expect munmap(), mremap() and mprotect()
to succeed when [vdso] isn't sealed, so that covers what the parameter
allows as well.
Suggested-by: Jeff Xu <jeffxu at google.com>
Signed-off-by: Chris Down <chris at chrisdown.name>
---
tools/testing/selftests/mm/sysmap_is_sealed.c | 25 ++++++++++++++++---
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/mm/sysmap_is_sealed.c b/tools/testing/selftests/mm/sysmap_is_sealed.c
index bfa140e01d8a..158e116ca3b4 100644
--- a/tools/testing/selftests/mm/sysmap_is_sealed.c
+++ b/tools/testing/selftests/mm/sysmap_is_sealed.c
@@ -56,6 +56,21 @@ static bool sysmaps_sealed(void)
return vdso && check_vmflag_sealed(vdso);
}
+static bool sysmaps_disabled(void)
+{
+ char cmdline[4096];
+ bool disabled = false;
+ FILE *f;
+
+ f = fopen("/proc/cmdline", "r");
+ if (!f)
+ return false;
+ if (fgets(cmdline, sizeof(cmdline), f))
+ disabled = strstr(cmdline, "no_mseal_sys_mappings");
+ fclose(f);
+ return disabled;
+}
+
/*
* Kernels built without CONFIG_MSEAL_SYSTEM_MAPPINGS don't seal system
* mappings either, so check_sealed skips if they aren't sealed. This fails
@@ -63,7 +78,7 @@ static bool sysmaps_sealed(void)
*/
TEST(expect_sealed)
{
- EXPECT_TRUE(sysmaps_sealed());
+ EXPECT_EQ(!sysmaps_disabled(), sysmaps_sealed());
}
FIXTURE(basic) {
@@ -127,7 +142,9 @@ FIXTURE_VARIANT_ADD(basic, stack) {
TEST_F(basic, check_sealed)
{
- if (!sysmaps_sealed())
+ bool disabled = sysmaps_disabled();
+
+ if (!disabled && !sysmaps_sealed())
SKIP(return, "system mappings are not sealed");
if (!has_mapping(variant->name, self->maps)) {
@@ -135,8 +152,8 @@ TEST_F(basic, check_sealed)
variant->name);
}
- EXPECT_EQ(variant->sealed,
- mapping_is_sealed(variant->name, self->maps));
+ EXPECT_EQ(variant->sealed && !disabled,
+ mapping_is_sealed(variant->name, self->maps));
};
static void *find_vdso(struct procmap_fd *procmap, size_t *size)
--
2.54.0
More information about the linux-riscv
mailing list