[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