[LTP] [PATCH] syscall: set FORK in tst_sig for some old tests
Li Wang
li.wang@linux.dev
Thu Aug 13 04:32:16 CEST 2026
From: Li Wang <liwang@hygon.cn>
Since commit d90d2004657b ("lib: Use backoff polling to wait for loop
device nodes") use TST_RETRY_FN_EXP_BACKOFF(), which calls tst_multiply_timeout().
That in turn reaches tst_has_slow_kconfig() -> tst_kconfig_read() ->
popen("zcat /proc/config.gz") to read the kernel config.
popen() forks a child, and that child exits the SIGCHLD is reported
as an unexpected signal by the tst_sig(NOFORK) handler:
umount2_01 1 TBROK : tst_sig.c:232: unexpected signal SIGCHLD(17) received
Since these tests now genuinely fork (indirectly via popen), declaring
FORK matches their actual behavior and lets the handler tolerate the
child's SIGCHLD. This is a minimal fix that preserves the retry logic.
These are old-API tests that will eventually be converted to the new
tst_test API and this issue disappears entirely. The one-line FORK
change is a low-cost bridge until then.
Fixes: d90d2004657b ("lib: Use backoff polling to wait for loop device nodes")
Signed-off-by: Li Wang <liwang@hygon.cn>
---
Notes:
This is a temporary solution for the regression, I will convert
these old tests to the new API next few days.
testcases/kernel/syscalls/linkat/linkat02.c | 2 +-
testcases/kernel/syscalls/mknodat/mknodat02.c | 2 +-
testcases/kernel/syscalls/rename/rename11.c | 2 +-
testcases/kernel/syscalls/renameat/renameat01.c | 2 +-
testcases/kernel/syscalls/umount2/umount2_01.c | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/testcases/kernel/syscalls/linkat/linkat02.c b/testcases/kernel/syscalls/linkat/linkat02.c
index 273587271..6dfa7cfb5 100644
--- a/testcases/kernel/syscalls/linkat/linkat02.c
+++ b/testcases/kernel/syscalls/linkat/linkat02.c
@@ -140,7 +140,7 @@ static void setup(void)
{
tst_require_root();
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
+ tst_sig(FORK, DEF_HANDLER, cleanup);
tst_tmpdir();
diff --git a/testcases/kernel/syscalls/mknodat/mknodat02.c b/testcases/kernel/syscalls/mknodat/mknodat02.c
index 2f7c56f00..89cfc5978 100644
--- a/testcases/kernel/syscalls/mknodat/mknodat02.c
+++ b/testcases/kernel/syscalls/mknodat/mknodat02.c
@@ -107,7 +107,7 @@ static void setup(void)
tst_require_root();
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
+ tst_sig(FORK, DEF_HANDLER, cleanup);
tst_tmpdir();
diff --git a/testcases/kernel/syscalls/rename/rename11.c b/testcases/kernel/syscalls/rename/rename11.c
index 8ff9f7d38..26e324d64 100644
--- a/testcases/kernel/syscalls/rename/rename11.c
+++ b/testcases/kernel/syscalls/rename/rename11.c
@@ -90,7 +90,7 @@ static void setup(void)
{
int i;
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
+ tst_sig(FORK, DEF_HANDLER, cleanup);
tst_require_root();
diff --git a/testcases/kernel/syscalls/renameat/renameat01.c b/testcases/kernel/syscalls/renameat/renameat01.c
index 72e72b481..f9ed3a9a7 100644
--- a/testcases/kernel/syscalls/renameat/renameat01.c
+++ b/testcases/kernel/syscalls/renameat/renameat01.c
@@ -134,7 +134,7 @@ static void setup(void)
tst_require_root();
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
+ tst_sig(FORK, DEF_HANDLER, cleanup);
tst_tmpdir();
diff --git a/testcases/kernel/syscalls/umount2/umount2_01.c b/testcases/kernel/syscalls/umount2/umount2_01.c
index 274409ef3..c6496e306 100644
--- a/testcases/kernel/syscalls/umount2/umount2_01.c
+++ b/testcases/kernel/syscalls/umount2/umount2_01.c
@@ -67,7 +67,7 @@ static void setup(void)
{
tst_require_root();
- tst_sig(NOFORK, DEF_HANDLER, NULL);
+ tst_sig(FORK, DEF_HANDLER, NULL);
tst_tmpdir();
--
2.55.0
More information about the ltp
mailing list