mbox series

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

Message ID 20240429191911.2552580-1-mic@digikod.net
Headers show
Series Fix Kselftest's vfork() side effects | expand

Message

Mickaël Salaün April 29, 2024, 7:19 p.m. UTC
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

Comments

Mickaël Salaün April 30, 2024, 1:54 p.m. UTC | #1
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
>
Jakub Kicinski April 30, 2024, 3:13 p.m. UTC | #2
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 🤷️
Mickaël Salaün April 30, 2024, 4:38 p.m. UTC | #3
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.
Kees Cook April 30, 2024, 4:50 p.m. UTC | #4
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