• Mickaël Salaün's avatar
    selftests/harness: Fix tests timeout and race condition · 130e4280
    Mickaël Salaün authored
    We cannot use CLONE_VFORK because we also need to wait for the timeout
    signal.
    
    Restore tests timeout by using the original fork() call in __run_test()
    but also in __TEST_F_IMPL().  Also fix a race condition when waiting for
    the test child process.
    
    Because test metadata are shared between test processes, only the
    parent process must set the test PID (child).  Otherwise, t->pid may be
    set to zero, leading to inconsistent error cases:
    
      #  RUN           layout1.rule_on_mountpoint ...
      # rule_on_mountpoint: Test ended in some other way [127]
      #            OK  layout1.rule_on_mountpoint
      ok 20 layout1.rule_on_mountpoint
    
    As safeguards, initialize the "status" variable with a valid exit code,
    and handle unknown test exits as errors.
    
    The use of fork() introduces a new race condition in landlock/fs_test.c
    which seems to be specific to hostfs bind mounts, but I haven't found
    the root cause and it's difficult to trigger.  I'll try to fix it with
    another patch.
    
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Günther Noack <gnoack@google.com>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Will Drewry <wad@chromium.org>
    Cc: stable@vger.kernel.org
    Closes: https://lore.kernel.org/r/9341d4db-5e21-418c-bf9e-9ae2da7877e1@sirena.org.uk
    Fixes: a86f1890 ("selftests/harness: Fix interleaved scheduling leading to race conditions")
    Fixes: 24cf65a6 ("selftests/harness: Share _metadata between forked processes")
    Link: https://lore.kernel.org/r/20240621180605.834676-1-mic@digikod.netTested-by: default avatarMark Brown <broonie@kernel.org>
    Signed-off-by: default avatarMickaël Salaün <mic@digikod.net>
    130e4280
kselftest_harness.h 35.5 KB