All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Andrea Cervesato <andrea.cervesato@suse.de>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>, ltp@lists.linux.it
Subject: Re: [LTP] [PATCH 2/2] Add madvise12 test
Date: Wed, 11 Dec 2024 01:30:48 +0100	[thread overview]
Message-ID: <20241211003048.GG386508@pevik> (raw)
In-Reply-To: <20241203-madvise_guard_install-v1-2-c0485abbfc73@suse.com>

Hi Andrea,

[ I dared to Cc Lorenzo, the author of the kernel implementation ]

> Verify that MADV_GUARD_INSTALL is causing SIGSEGV when someone is
> trying to access memory advised with it.

Test LGTM, thanks for covering a new kernel feature.

Closes: https://github.com/linux-test-project/ltp/issues/1210

> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
>  runtest/syscalls                              |   1 +
>  testcases/kernel/syscalls/madvise/.gitignore  |   1 +
>  testcases/kernel/syscalls/madvise/madvise12.c | 102 ++++++++++++++++++++++++++
>  3 files changed, 104 insertions(+)

> diff --git a/runtest/syscalls b/runtest/syscalls
> index 5fd62617df1a116b1d94c57ff30f74693320a2ab..ded035ee82d0e97c67cc1e7c487b010634b2d1a0 100644
> --- a/runtest/syscalls
> +++ b/runtest/syscalls
> @@ -1000,6 +1000,7 @@ madvise08 madvise08
>  madvise09 madvise09
>  madvise10 madvise10
>  madvise11 madvise11
> +madvise12 madvise12

>  newuname01 newuname01

> diff --git a/testcases/kernel/syscalls/madvise/.gitignore b/testcases/kernel/syscalls/madvise/.gitignore
> index 722ac3c34306bac414313f1ce36ca98d715cd04c..758e601a9c4e7682a925f16184d14f2357009bc2 100644
> --- a/testcases/kernel/syscalls/madvise/.gitignore
> +++ b/testcases/kernel/syscalls/madvise/.gitignore
> @@ -8,3 +8,4 @@
>  /madvise09
>  /madvise10
>  /madvise11
> +/madvise12
> diff --git a/testcases/kernel/syscalls/madvise/madvise12.c b/testcases/kernel/syscalls/madvise/madvise12.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..2bdf843f016a7c9d175a31b76ae805d63c4cbc80
> --- /dev/null
> +++ b/testcases/kernel/syscalls/madvise/madvise12.c
> @@ -0,0 +1,102 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2024 Andrea Cervesato <andrea.cervesato@suse.com>
> + */
> +
> +/*\
> + * [Description]
> + *
> + * Verify that MADV_GUARD_INSTALL is causing SIGSEGV when someone is accessing
> + * memory advised with it.

Maybe add:
	* This is a test for feature implemented in
	* 662df3e5c376 ("mm: madvise: implement lightweight guard page mechanism")

The rest LGTM.

Reviewed-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr

> + *
> + * [Algorithm]
> + *
> + * - allocate a certain amount of memory
> + * - advise memory with MADV_GUARD_INSTALL
> + * - access to memory from within a child and verify it gets killed by SIGSEGV
> + * - release memory with MADV_GUARD_REMOVE
> + * - verify that memory has not been modified before child got killed
> + * - modify memory within a new child
> + * - verify that memory is accessable and child was not killed by SIGSEGV
> + */
> +
> +#include "tst_test.h"
> +#include "lapi/mmap.h"
> +
> +#define MAP_SIZE (8 * TST_KB)
> +
> +static char *addr;
> +
> +static void run(void)
> +{
> +	pid_t pid;
> +	int status;
> +
> +	memset(addr, 0, MAP_SIZE);
> +
> +	TST_EXP_PASS(madvise(addr, MAP_SIZE, MADV_GUARD_INSTALL));
> +
> +	pid = SAFE_FORK();
> +	if (!pid) {
> +		tst_res(TINFO, "Modifying memory content");
> +
> +		memset(addr, 'a', MAP_SIZE);
> +		exit(0);
> +	}
> +
> +	SAFE_WAITPID(pid, &status, 0);
> +
> +	if (WIFSIGNALED(status) && WTERMSIG(status) == SIGSEGV)
> +		tst_res(TPASS, "Child ended by SIGSEGV as expected");
> +	else
> +		tst_res(TFAIL, "Child: %s", tst_strstatus(status));
> +
> +	TST_EXP_PASS(madvise(addr, MAP_SIZE, MADV_GUARD_REMOVE));
> +
> +	for (int i = 0; i < MAP_SIZE; i++) {
> +		if (addr[i] == 'a') {
> +			tst_res(TFAIL, "Memory content has been modified");
> +			return;
> +		}
> +	}
> +
> +	tst_res(TPASS, "Memory content didn't change");
> +
> +	pid = SAFE_FORK();
> +	if (!pid) {
> +		tst_res(TINFO, "Modifying memory content");
> +
> +		memset(addr, 'b', MAP_SIZE);
> +		exit(0);
> +	}
> +
> +	SAFE_WAITPID(pid, &status, 0);
> +
> +	if (!WIFSIGNALED(status))
> +		tst_res(TPASS, "Child ended without being signaled");
> +	else
> +		tst_res(TFAIL, "Child ended with %s", tst_strstatus(status));
> +}
> +
> +static void setup(void)
> +{
> +	addr = SAFE_MMAP(NULL, MAP_SIZE,
> +			PROT_READ | PROT_WRITE,
> +			MAP_PRIVATE | MAP_ANONYMOUS,
> +			-1, 0);
> +}
> +
> +static void cleanup(void)
> +{
> +	if (addr)
> +		SAFE_MUNMAP(addr, MAP_SIZE);
> +}
> +
> +static struct tst_test test = {
> +	.test_all = run,
> +	.setup = setup,
> +	.cleanup = cleanup,
> +	.needs_root = 1,
> +	.forks_child = 1,
> +	.min_kver = "6.13",
> +};

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2024-12-11  0:31 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-03 13:36 [LTP] [PATCH 0/2] Coverage for MADV_GUARD_* features Andrea Cervesato
2024-12-03 13:36 ` [LTP] [PATCH 1/2] Fallback for MADV_GUARD_* definitions Andrea Cervesato
2024-12-11  0:18   ` Petr Vorel
2024-12-03 13:36 ` [LTP] [PATCH 2/2] Add madvise12 test Andrea Cervesato
2024-12-11  0:30   ` Petr Vorel [this message]
2024-12-11  9:29     ` Lorenzo Stoakes via ltp
2024-12-11  9:52       ` Andrea Cervesato via ltp
2024-12-11  9:55       ` Petr Vorel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241211003048.GG386508@pevik \
    --to=pvorel@suse.cz \
    --cc=andrea.cervesato@suse.de \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.