[LTP] [PATCH] ima: rewrite ima_mmap auxiliary with TST_NO_DEFAULT_MAIN

Li Wang li.wang@linux.dev
Thu May 7 11:46:43 CEST 2026


Commit 7276e7c154 ("ima_violations.sh: ima_mmap.c: Replace sleep with
checkpoints") called tst_reinit() inside the run() callback of a
struct tst_test based binary. This is incorrect because the test
framework has already initialized the IPC during setup, and calling
tst_reinit() re-maps the shared memory to the parent shell's IPC
region, corrupting the C binary's own test infrastructure.

Fix this by converting ima_mmap to a TST_NO_DEFAULT_MAIN helper
binary. In this mode there is no prior framework initialization, so
tst_reinit() correctly attaches to the parent shell test's shared
memory for checkpoint communication, following the same pattern used
by other LTP helper binaries (e.g. execvp01_child).

Fixes: 7276e7c154 ("ima_violations.sh: ima_mmap.c: Replace sleep with checkpoints")
Signed-off-by: Li Wang <li.wang@linux.dev>
---
 .../security/integrity/ima/src/ima_mmap.c     | 40 ++++++-------------
 .../integrity/ima/tests/ima_violations.sh     |  5 +--
 2 files changed, 14 insertions(+), 31 deletions(-)

diff --git a/testcases/kernel/security/integrity/ima/src/ima_mmap.c b/testcases/kernel/security/integrity/ima/src/ima_mmap.c
index 09b22fd4f..1861147f8 100644
--- a/testcases/kernel/security/integrity/ima/src/ima_mmap.c
+++ b/testcases/kernel/security/integrity/ima/src/ima_mmap.c
@@ -7,46 +7,30 @@
  * Mimi Zohar <zohar@us.ibm.com>
  */
 
+#define TST_NO_DEFAULT_MAIN
 #include "tst_test.h"
 
 #define MMAPSIZE 1024
 
-static char *filename;
-static void *file;
-static int fd;
-
-static void cleanup(void)
+int main(int argc, char *argv[])
 {
-	if (file)
-		SAFE_MUNMAP(file, MMAPSIZE);
-
-	if (fd > 0)
-		SAFE_CLOSE(fd);
-}
+	int fd;
+	void *file;
 
-static void run(void)
-{
-	if (!filename)
-		tst_brk(TBROK, "missing filename (-f filename)");
+	tst_reinit();
 
-	fd = SAFE_OPEN(filename, O_CREAT | O_RDWR, S_IRWXU);
+	if (argc != 2)
+		tst_brk(TBROK, "usage: ima_mmap <filename>");
 
+	fd = SAFE_OPEN(argv[1], O_CREAT | O_RDWR, S_IRWXU);
 	file = SAFE_MMAP(NULL, MMAPSIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
 	SAFE_CLOSE(fd);
 
-	tst_reinit();
-	TST_CHECKPOINT_WAIT(0);
-	/* keep running until ima_violations.sh open and close file */
+	/* Waiting until ima_violations.sh open and close file */
 	TST_CHECKPOINT_WAKE_AND_WAIT(0);
 
+	SAFE_MUNMAP(file, MMAPSIZE);
 	tst_res(TPASS, "test completed");
-}
 
-static struct tst_test test = {
-	.options = (struct tst_option[]) {
-		{"f:", &filename, "File to mmap"},
-		{}
-	},
-	.test_all = run,
-	.cleanup = cleanup,
-};
+	return 0;
+}
diff --git a/testcases/kernel/security/integrity/ima/tests/ima_violations.sh b/testcases/kernel/security/integrity/ima/tests/ima_violations.sh
index d7dcd077b..6271bba35 100755
--- a/testcases/kernel/security/integrity/ima/tests/ima_violations.sh
+++ b/testcases/kernel/security/integrity/ima/tests/ima_violations.sh
@@ -170,11 +170,10 @@ test3()
 
 	echo 'testing testing' > $FILE
 
-	ima_mmap -f $FILE &
+	ima_mmap $FILE &
 	pid=$!
 
-	# wait for violations appear in logs
-	TST_CHECKPOINT_WAKE_AND_WAIT 0
+	TST_CHECKPOINT_WAIT 0
 
 	open_file_read
 	close_file_read
-- 
2.54.0



More information about the ltp mailing list