On Mon, Feb 26, 2024 at 05:23:35PM +0100, Mickaël Salaün wrote:
Remplace Landlock-specific TEST_F_FORK() with an improved TEST_F() which brings four related changes:
Run TEST_F()'s tests in a grandchild process to make it possible to drop privileges and delegate teardown to the parent.
Compared to TEST_F_FORK(), simplify handling of the test grandchild process thanks to vfork(2), and makes it generic (e.g. no explicit conversion between exit code and _metadata).
Compared to TEST_F_FORK(), run teardown even when tests failed with an assert thanks to commit 63e6b2a42342 ("selftests/harness: Run TEARDOWN for ASSERT failures").
Simplify the test harness code by removing the no_print and step fields which are not used. I added this feature just after I made kselftest_harness.h more broadly available but this step counter remained even though it wasn't needed after all. See commit 369130b63178 ("selftests: Enhance kselftest_harness.h to print which assert failed").
I'm personally fine dropping the step counter. (I do wonder if that removal should be split from the grandchild launching.)
Replace spaces with tabs in one line of __TEST_F_IMPL().
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 Signed-off-by: Mickaël Salaün mic@digikod.net
One typo below, but otherwise seems good to me:
Reviewed-by: Kees Cook keescook@chromium.org
[...] _metadata->setup_completed = true; \
fixture_name##_##test_name(_metadata, &self, variant->data); \
/* Use the same _metadata. */ \
child = vfork(); \
if (child == 0) { \
fixture_name##_##test_name(_metadata, &self, variant->data); \
_exit(0); \
} \
if (child < 0) { \
ksft_print_msg("ERROR SPAWNING TEST GANDCHILD\n"); \
typo: GAND -> GRAND