[LTP] [PATCH v5 1/2] core: add tst_selinux_enabled() utility

Andrea Cervesato andrea.cervesato@suse.de
Wed Jul 23 18:04:49 CEST 2025


From: Andrea Cervesato <andrea.cervesato@suse.com>

Add tst_lsm_enabled() utility in tst_security.h in order to verify
if a certain LSM is up and running.

Reviewed-by: Petr Vorel <pvorel@suse.cz>
Reviewed-by: Wei Gao <wegao@suse.com>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
 include/tst_security.h                     |  4 ++++
 lib/tst_security.c                         | 30 +++++++++++++++++++++++++-
 testcases/kernel/syscalls/lsm/lsm_common.h | 34 +++---------------------------
 3 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/include/tst_security.h b/include/tst_security.h
index 5d91f8a98f104b0cafaaf2046bc0ceec06870606..e2d7270daedcd5a303aa6a6184965cacf25c8fad 100644
--- a/include/tst_security.h
+++ b/include/tst_security.h
@@ -5,6 +5,10 @@
 #ifndef TST_SECURITY_H__
 #define TST_SECURITY_H__
 
+#define LSM_SYS_FILE "/sys/kernel/security/lsm"
+
+int tst_lsm_enabled(const char *name);
+
 /*
  * Detect whether FIPS enabled
  * @return 0: FIPS not enabled, 1: FIPS enabled
diff --git a/lib/tst_security.c b/lib/tst_security.c
index 7d929fafe729058f55b921bf5cf7806b253496e0..c515271351bbc3126e58feef28dc2a88f2d40509 100644
--- a/lib/tst_security.c
+++ b/lib/tst_security.c
@@ -7,7 +7,8 @@
 
 #define PATH_FIPS	"/proc/sys/crypto/fips_enabled"
 #define PATH_LOCKDOWN	"/sys/kernel/security/lockdown"
-#define SELINUX_STATUS_PATH "/sys/fs/selinux/enforce"
+#define SELINUX_PATH "/sys/fs/selinux"
+#define SELINUX_STATUS_PATH (SELINUX_PATH "/enforce")
 
 #if defined(__powerpc64__) || defined(__ppc64__)
 # define SECUREBOOT_VAR "/proc/device-tree/ibm,secure-boot"
@@ -19,6 +20,7 @@
 
 #include <fcntl.h>
 #include <stdio.h>
+#include <string.h>
 #include <stdlib.h>
 #include <sys/mount.h>
 
@@ -28,6 +30,32 @@
 #include "tst_security.h"
 #include "tst_private.h"
 
+int tst_lsm_enabled(const char *name)
+{
+	int fd;
+	char *ptr;
+	char data[BUFSIZ];
+
+	if (access(LSM_SYS_FILE, F_OK))
+		tst_brk(TCONF, "%s file is not present", LSM_SYS_FILE);
+
+	fd = SAFE_OPEN(LSM_SYS_FILE, O_RDONLY);
+	SAFE_READ(0, fd, data, BUFSIZ);
+	SAFE_CLOSE(fd);
+
+	ptr = strtok(data, ",");
+	while (ptr != NULL) {
+		if (!strcmp(ptr, name)) {
+			tst_res(TINFO, "%s is enabled", name);
+			return 1;
+		}
+
+		ptr = strtok(NULL, ",");
+	}
+
+	return 0;
+}
+
 int tst_fips_enabled(void)
 {
 	int fips = 0;
diff --git a/testcases/kernel/syscalls/lsm/lsm_common.h b/testcases/kernel/syscalls/lsm/lsm_common.h
index 549f2d49b0b9290c4d75c87025911a81f4fa3c19..cc063eeab25545e8fc9ee40314c591b68c07dda7 100644
--- a/testcases/kernel/syscalls/lsm/lsm_common.h
+++ b/testcases/kernel/syscalls/lsm/lsm_common.h
@@ -9,8 +9,6 @@
 #include "tst_test.h"
 #include "lapi/lsm.h"
 
-#define LSM_SYS_FILE "/sys/kernel/security/lsm"
-
 static inline struct lsm_ctx *next_ctx(struct lsm_ctx *tctx)
 {
 	return (struct lsm_ctx *)((char *)tctx + sizeof(*tctx) + tctx->ctx_len);
@@ -40,43 +38,17 @@ static inline void read_proc_attr(const char *attr, char *val, const size_t size
 	SAFE_CLOSE(fd);
 }
 
-static inline int verify_enabled_lsm(const char *name)
-{
-	int fd;
-	char *ptr;
-	char data[BUFSIZ];
-
-	if (access(LSM_SYS_FILE, F_OK))
-		tst_brk(TCONF, "%s file is not present", LSM_SYS_FILE);
-
-	fd = SAFE_OPEN(LSM_SYS_FILE, O_RDONLY);
-	SAFE_READ(0, fd, data, BUFSIZ);
-	SAFE_CLOSE(fd);
-
-	ptr = strtok(data, ",");
-	while (ptr != NULL) {
-		if (!strcmp(ptr, name)) {
-			tst_res(TINFO, "%s is enabled", name);
-			return 1;
-		}
-
-		ptr = strtok(NULL, ",");
-	}
-
-	return 0;
-}
-
 static inline uint32_t count_supported_attr_current(void)
 {
 	uint32_t lsm_count = 0;
 
-	if (verify_enabled_lsm("selinux"))
+	if (tst_lsm_enabled("selinux"))
 		lsm_count++;
 
-	if (verify_enabled_lsm("apparmor"))
+	if (tst_lsm_enabled("apparmor"))
 		lsm_count++;
 
-	if (verify_enabled_lsm("smack"))
+	if (tst_lsm_enabled("smack"))
 		lsm_count++;
 
 	return lsm_count;

-- 
2.50.1



More information about the ltp mailing list