From: Kees Cook <keescook@chromium.org>
To: "Mickaël Salaün" <mic@digikod.net>
Cc: "Christian Brauner" <brauner@kernel.org>,
"Jakub Kicinski" <kuba@kernel.org>,
"Mark Brown" <broonie@kernel.org>,
"Shengyu Li" <shengyu.li.evgeny@gmail.com>,
"Shuah Khan" <shuah@kernel.org>,
"David S . Miller" <davem@davemloft.net>,
"Günther Noack" <gnoack@google.com>,
"Will Drewry" <wad@chromium.org>,
"kernel test robot" <oliver.sang@intel.com>,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: Re: [PATCH v2 4/9] selftests/harness: Fix interleaved scheduling leading to race conditions
Date: Mon, 29 Apr 2024 08:52:36 -0700 [thread overview]
Message-ID: <202404290852.C327596A@keescook> (raw)
In-Reply-To: <20240429130931.2394118-5-mic@digikod.net>
On Mon, Apr 29, 2024 at 03:09:26PM +0200, Mickaël Salaün wrote:
> Fix a race condition when running several FIXTURE_TEARDOWN() managing
> the same resource. This fixes a race condition in the Landlock file
> system tests when creating or unmounting the same directory.
>
> Using clone3() with CLONE_VFORK guarantees that the child and grandchild
> test processes are sequentially scheduled. This is implemented with a
> new clone3_vfork() helper replacing the fork() call.
>
> This avoids triggering this error in __wait_for_test():
> Test ended in some other way [127]
>
> Cc: Christian Brauner <brauner@kernel.org>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: Günther Noack <gnoack@google.com>
> Cc: Jakub Kicinski <kuba@kernel.org>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Mark Brown <broonie@kernel.org>
> Cc: Shuah Khan <shuah@kernel.org>
> Cc: Will Drewry <wad@chromium.org>
> Fixes: 41cca0542d7c ("selftests/harness: Fix TEST_F()'s vfork handling")
> Signed-off-by: Mickaël Salaün <mic@digikod.net>
> Link: https://lore.kernel.org/r/20240429130931.2394118-5-mic@digikod.net
> ---
> tools/testing/selftests/kselftest_harness.h | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/selftests/kselftest_harness.h
> index 55699a762c45..9f04638707ae 100644
> --- a/tools/testing/selftests/kselftest_harness.h
> +++ b/tools/testing/selftests/kselftest_harness.h
> @@ -66,6 +66,8 @@
> #include <sys/wait.h>
> #include <unistd.h>
> #include <setjmp.h>
> +#include <syscall.h>
> +#include <linux/sched.h>
>
> #include "kselftest.h"
>
> @@ -80,6 +82,17 @@
> # define TH_LOG_ENABLED 1
> #endif
>
> +/* Wait for the child process to end but without sharing memory mapping. */
> +static pid_t __attribute__((__unused__)) clone3_vfork(void)
Why "unused"?
> +{
> + struct clone_args args = {
> + .flags = CLONE_VFORK,
> + .exit_signal = SIGCHLD,
> + };
> +
> + return syscall(__NR_clone3, &args, sizeof(args));
> +}
> +
> /**
> * TH_LOG()
> *
> @@ -1183,7 +1196,7 @@ void __run_test(struct __fixture_metadata *f,
> fflush(stdout);
> fflush(stderr);
>
> - t->pid = fork();
> + t->pid = clone3_vfork();
> if (t->pid < 0) {
> ksft_print_msg("ERROR SPAWNING TEST CHILD\n");
> t->exit_code = KSFT_FAIL;
Regardless, yup, looks good.
Reviewed-by: Kees Cook <keescook@chromium.org>
--
Kees Cook
next prev parent reply other threads:[~2024-04-29 15:52 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-29 13:09 [PATCH v2 0/5] Fix Kselftest's vfork() side effects Mickaël Salaün
2024-04-29 13:09 ` [PATCH v2 1/9] selftests/pidfd: Fix config for pidfd_setns_test Mickaël Salaün
2024-04-29 13:09 ` [PATCH v2 2/9] selftests/landlock: Fix FS tests when run on a private mount point Mickaël Salaün
2024-04-29 13:09 ` [PATCH v2 3/9] selftests/harness: Fix fixture teardown Mickaël Salaün
2024-04-29 13:09 ` [PATCH v2 4/9] selftests/harness: Fix interleaved scheduling leading to race conditions Mickaël Salaün
2024-04-29 15:52 ` Kees Cook [this message]
2024-04-29 17:16 ` Jakub Kicinski
2024-04-29 19:18 ` Mickaël Salaün
2024-04-29 13:09 ` [PATCH v2 5/9] selftests/landlock: Do not allocate memory in fixture data Mickaël Salaün
2024-04-29 15:52 ` Kees Cook
2024-04-29 13:09 ` [PATCH v2 6/9] selftests/harness: Constify fixture variants Mickaël Salaün
2024-04-29 15:53 ` Kees Cook
2024-04-29 13:09 ` [PATCH v2 7/9] selftests/pidfd: Fix wrong expectation Mickaël Salaün
2024-04-29 15:56 ` Kees Cook
2024-04-29 13:09 ` [PATCH v2 8/9] selftests/harness: Share _metadata between forked processes Mickaël Salaün
2024-04-29 15:56 ` Kees Cook
2024-04-29 13:09 ` [PATCH v2 9/9] selftests/harness: Fix vfork() side effects Mickaël Salaün
2024-04-29 15:57 ` Kees Cook
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=202404290852.C327596A@keescook \
--to=keescook@chromium.org \
--cc=brauner@kernel.org \
--cc=broonie@kernel.org \
--cc=davem@davemloft.net \
--cc=gnoack@google.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mic@digikod.net \
--cc=oliver.sang@intel.com \
--cc=shengyu.li.evgeny@gmail.com \
--cc=shuah@kernel.org \
--cc=wad@chromium.org \
/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.