[LTP] [PATCH v1] fanotify14: fix anonymous pipe testcases

Mete Durlu meted@linux.ibm.com
Thu Mar 7 10:26:03 CET 2024


When SElinux is configured (comes out of the box on most distros) and
is configured to enforcing (the default configuration), tests related
to anonymous pipes return EACCES instead of the expected errno EINVAL.
Fix the failures caused by the above condition by checking the SElinux
configuration and adjusting the errno accordingly.

Signed-off-by: Mete Durlu <meted@linux.ibm.com>
---
 testcases/kernel/syscalls/fanotify/fanotify14.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/testcases/kernel/syscalls/fanotify/fanotify14.c b/testcases/kernel/syscalls/fanotify/fanotify14.c
index d02d81495..61ed8c660 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify14.c
+++ b/testcases/kernel/syscalls/fanotify/fanotify14.c
@@ -27,12 +27,14 @@
 #define _GNU_SOURCE
 #include "tst_test.h"
 #include <errno.h>
+#include <stdlib.h>
 
 #ifdef HAVE_SYS_FANOTIFY_H
 #include "fanotify.h"
 
 #define MNTPOINT "mntpoint"
 #define FILE1 MNTPOINT"/file1"
+#define SELINUX_STATUS_PATH "/sys/fs/selinux/enforce"
 
 /*
  * List of inode events that are only available when notification group is
@@ -240,6 +242,19 @@ static struct test_case_t {
 	},
 };
 
+static int is_selinux_enforcing(void)
+{
+	char res;
+	int fd;
+
+	fd = open(SELINUX_STATUS_PATH, O_RDONLY);
+	if (fd <= 0)
+		return 0;
+	SAFE_READ(1, fd, &res, 1);
+	SAFE_CLOSE(fd);
+	return atoi(&res);
+}
+
 static void do_test(unsigned int number)
 {
 	struct test_case_t *tc = &test_cases[number];
@@ -279,6 +294,8 @@ static void do_test(unsigned int number)
 	if (tc->pfd) {
 		dirfd = tc->pfd[0];
 		path = NULL;
+		if (is_selinux_enforcing())
+			tc->expected_errno = EACCES;
 	}
 
 	tst_res(TINFO, "Testing %s with %s",
-- 
2.44.0



More information about the ltp mailing list