Commit 67203f3f authored by Pedro Falcato's avatar Pedro Falcato Committed by Andrew Morton

selftests/mm: add mseal test for no-discard madvise

Add an mseal test for madvise() operations that aren't considered
"discard" (e.g purely advisory ops such as MADV_RANDOM).

[pedro.falcato@gmail.com: adjust the mseal test's plan]
  Link: https://lkml.kernel.org/r/20240807203724.2686144-1-pedro.falcato@gmail.com
Link: https://lkml.kernel.org/r/20240807173336.2523757-3-pedro.falcato@gmail.comSigned-off-by: default avatarPedro Falcato <pedro.falcato@gmail.com>
Tested-by: default avatarJeff Xu <jeffxu@chromium.org>
Reviewed-by: default avatarJeff Xu <jeffxu@chromium.org>
Cc: Kees Cook <kees@kernel.org>
Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent cc0a0f98
......@@ -1731,6 +1731,38 @@ static void test_seal_discard_ro_anon(bool seal)
REPORT_TEST_PASS();
}
static void test_seal_madvise_nodiscard(bool seal)
{
void *ptr;
unsigned long page_size = getpagesize();
unsigned long size = 4 * page_size;
int ret;
setup_single_address(size, &ptr);
FAIL_TEST_IF_FALSE(ptr != (void *)-1);
if (seal) {
ret = seal_single_address(ptr, size);
FAIL_TEST_IF_FALSE(!ret);
}
/*
* Test a random madvise flag like MADV_RANDOM that does not touch page
* contents (and thus should work for msealed VMAs). RANDOM also happens to
* share bits with other discard-ish flags like REMOVE.
*/
ret = sys_madvise(ptr, size, MADV_RANDOM);
FAIL_TEST_IF_FALSE(!ret);
ret = sys_munmap(ptr, size);
if (seal)
FAIL_TEST_IF_FALSE(ret < 0);
else
FAIL_TEST_IF_FALSE(!ret);
REPORT_TEST_PASS();
}
int main(int argc, char **argv)
{
bool test_seal = seal_support();
......@@ -1743,7 +1775,7 @@ int main(int argc, char **argv)
if (!pkey_supported())
ksft_print_msg("PKEY not supported\n");
ksft_set_plan(80);
ksft_set_plan(82);
test_seal_addseal();
test_seal_unmapped_start();
......@@ -1822,6 +1854,8 @@ int main(int argc, char **argv)
test_seal_mremap_move_fixed_zero(true);
test_seal_mremap_move_dontunmap_anyaddr(false);
test_seal_mremap_move_dontunmap_anyaddr(true);
test_seal_madvise_nodiscard(false);
test_seal_madvise_nodiscard(true);
test_seal_discard_ro_anon(false);
test_seal_discard_ro_anon(true);
test_seal_discard_ro_anon_on_rw(false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment