[PATCH v3 0/9] Fix Kselftest's vfork() side effects

Mickaël Salaün posted 9 patches 1 year, 7 months ago
There is a newer version of this series
tools/testing/selftests/kselftest_harness.h   | 113 +++++++++++++-----
tools/testing/selftests/landlock/fs_test.c    |  83 ++++++++-----
tools/testing/selftests/pidfd/config          |   2 +
.../selftests/pidfd/pidfd_setns_test.c        |   2 +-
4 files changed, 135 insertions(+), 65 deletions(-)
[PATCH v3 0/9] Fix Kselftest's vfork() side effects
Posted by Mickaël Salaün 1 year, 7 months ago
Hi,

As reported by Kernel Test Robot [1], some pidfd tests fail.  This is
due to the use of vfork() which introduced some side effects.
Similarly, while making it more generic, a previous commit made some
Landlock file system tests flaky, and subject to the host's file system
mount configuration.

This series fixes all these side effects by replacing vfork() with
clone3() and CLONE_VFORK, which is cleaner (no arbitrary shared memory)
and makes the Kselftest framework more robust.

I tried different approaches and I found this one to be the cleaner and
less invasive for current test cases.

This third series replace improve the clone3_vfork() helper and add
Reviewed-by tags.

I successfully ran the following tests (using TEST_F and
fork/clone/clone3) with this series:
- landlock:fs_test
- landlock:net_test
- landlock:ptrace_test
- move_mount_set_group:move_mount_set_group_test
- net/af_unix:scm_pidfd
- perf_events:remove_on_exec
- pidfd:pidfd_getfd_test
- pidfd:pidfd_setns_test
- seccomp:seccomp_bpf
- user_events:abi_test

[1] https://lore.kernel.org/oe-lkp/202403291015.1fcfa957-oliver.sang@intel.com

Previous versions:
v1: https://lore.kernel.org/r/20240426172252.1862930-1-mic@digikod.net
v2: https://lore.kernel.org/r/20240429130931.2394118-1-mic@digikod.net

Regards,

Mickaël Salaün (9):
  selftests/pidfd: Fix config for pidfd_setns_test
  selftests/landlock: Fix FS tests when run on a private mount point
  selftests/harness: Fix fixture teardown
  selftests/harness: Fix interleaved scheduling leading to race
    conditions
  selftests/landlock: Do not allocate memory in fixture data
  selftests/harness: Constify fixture variants
  selftests/pidfd: Fix wrong expectation
  selftests/harness: Share _metadata between forked processes
  selftests/harness: Fix vfork() side effects

 tools/testing/selftests/kselftest_harness.h   | 113 +++++++++++++-----
 tools/testing/selftests/landlock/fs_test.c    |  83 ++++++++-----
 tools/testing/selftests/pidfd/config          |   2 +
 .../selftests/pidfd/pidfd_setns_test.c        |   2 +-
 4 files changed, 135 insertions(+), 65 deletions(-)


base-commit: e67572cd2204894179d89bd7b984072f19313b03
-- 
2.44.0

Re: [PATCH v3 0/9] Fix Kselftest's vfork() side effects
Posted by Mickaël Salaün 1 year, 7 months ago
Shuah, could you please take this series in your tree and push it to
next?  This mainly fixes an issue in the pidfd tests and we should get
this merged before the final 6.9 release. Thanks.

Jakub, can you please review it?

Mark, it would be good to have your Tested-by tags. :)


On Mon, Apr 29, 2024 at 09:19:02PM +0200, Mickaël Salaün wrote:
> Hi,
> 
> As reported by Kernel Test Robot [1], some pidfd tests fail.  This is
> due to the use of vfork() which introduced some side effects.
> Similarly, while making it more generic, a previous commit made some
> Landlock file system tests flaky, and subject to the host's file system
> mount configuration.
> 
> This series fixes all these side effects by replacing vfork() with
> clone3() and CLONE_VFORK, which is cleaner (no arbitrary shared memory)
> and makes the Kselftest framework more robust.
> 
> I tried different approaches and I found this one to be the cleaner and
> less invasive for current test cases.
> 
> This third series replace improve the clone3_vfork() helper and add
> Reviewed-by tags.
> 
> I successfully ran the following tests (using TEST_F and
> fork/clone/clone3) with this series:
> - landlock:fs_test
> - landlock:net_test
> - landlock:ptrace_test
> - move_mount_set_group:move_mount_set_group_test
> - net/af_unix:scm_pidfd
> - perf_events:remove_on_exec
> - pidfd:pidfd_getfd_test
> - pidfd:pidfd_setns_test
> - seccomp:seccomp_bpf
> - user_events:abi_test
> 
> [1] https://lore.kernel.org/oe-lkp/202403291015.1fcfa957-oliver.sang@intel.com
> 
> Previous versions:
> v1: https://lore.kernel.org/r/20240426172252.1862930-1-mic@digikod.net
> v2: https://lore.kernel.org/r/20240429130931.2394118-1-mic@digikod.net
> 
> Regards,
> 
> Mickaël Salaün (9):
>   selftests/pidfd: Fix config for pidfd_setns_test
>   selftests/landlock: Fix FS tests when run on a private mount point
>   selftests/harness: Fix fixture teardown
>   selftests/harness: Fix interleaved scheduling leading to race
>     conditions
>   selftests/landlock: Do not allocate memory in fixture data
>   selftests/harness: Constify fixture variants
>   selftests/pidfd: Fix wrong expectation
>   selftests/harness: Share _metadata between forked processes
>   selftests/harness: Fix vfork() side effects
> 
>  tools/testing/selftests/kselftest_harness.h   | 113 +++++++++++++-----
>  tools/testing/selftests/landlock/fs_test.c    |  83 ++++++++-----
>  tools/testing/selftests/pidfd/config          |   2 +
>  .../selftests/pidfd/pidfd_setns_test.c        |   2 +-
>  4 files changed, 135 insertions(+), 65 deletions(-)
> 
> 
> base-commit: e67572cd2204894179d89bd7b984072f19313b03
> -- 
> 2.44.0
> 
Re: [PATCH v3 0/9] Fix Kselftest's vfork() side effects
Posted by Jakub Kicinski 1 year, 7 months ago
On Tue, 30 Apr 2024 15:54:38 +0200 Mickaël Salaün wrote:
> Jakub, can you please review it?

I looked thru it. I don't have the cycles to investigate and suggest 
a better approach but the sprinkling of mmaps(), if nothing else, feels
a bit band-aid-y 🤷️
Re: [PATCH v3 0/9] Fix Kselftest's vfork() side effects
Posted by Mickaël Salaün 1 year, 7 months ago
On Tue, Apr 30, 2024 at 08:13:04AM -0700, Jakub Kicinski wrote:
> On Tue, 30 Apr 2024 15:54:38 +0200 Mickaël Salaün wrote:
> > Jakub, can you please review it?
> 
> I looked thru it. I don't have the cycles to investigate and suggest 
> a better approach but the sprinkling of mmaps(), if nothing else, feels
> a bit band-aid-y 🤷️

The only mmap that could have side effects on existing tests in the
_metadata one, but in fact it would reveal issues in tests, so at the
end I think it's a good thing.

I'd like "self" to not be conditionally shared but that would require
changes in several tests.  Let's keep that for another release. :)

I also noticed that mmap() is already used in test_harness_run() with
results.
Re: [PATCH v3 0/9] Fix Kselftest's vfork() side effects
Posted by Kees Cook 1 year, 7 months ago
On Tue, Apr 30, 2024 at 06:38:40PM +0200, Mickaël Salaün wrote:
> On Tue, Apr 30, 2024 at 08:13:04AM -0700, Jakub Kicinski wrote:
> > On Tue, 30 Apr 2024 15:54:38 +0200 Mickaël Salaün wrote:
> > > Jakub, can you please review it?
> > 
> > I looked thru it. I don't have the cycles to investigate and suggest 
> > a better approach but the sprinkling of mmaps(), if nothing else, feels
> > a bit band-aid-y 🤷️
> 
> The only mmap that could have side effects on existing tests in the
> _metadata one, but in fact it would reveal issues in tests, so at the
> end I think it's a good thing.
> 
> I'd like "self" to not be conditionally shared but that would require
> changes in several tests.  Let's keep that for another release. :)
> 
> I also noticed that mmap() is already used in test_harness_run() with
> results.

Yeah, I was initially worried about adding this complexity, but at the
end of the day it actually makes things more robust. I'm in favor of it.

-Kees

-- 
Kees Cook