diff --git a/include/lsm.h b/include/lsm.h index d3b0c973c..05737ffbd 100644 --- a/include/lsm.h +++ b/include/lsm.h @@ -9,6 +9,11 @@ */ extern Lsmtype host_lsm_type(); +/* + * Initilize the Lsmtype for the current host + */ +extern void kerndat_lsm(); + /* * Read the LSM profile for the pstree item */ diff --git a/kerndat.c b/kerndat.c index 65e2c7539..54ba8c744 100644 --- a/kerndat.c +++ b/kerndat.c @@ -18,6 +18,7 @@ #include "asm/types.h" #include "cr_options.h" #include "util.h" +#include "lsm.h" struct kerndat_s kdat = { .tcp_max_rshare = 3U << 20, @@ -323,6 +324,8 @@ int kerndat_init(void) if (!ret) ret = kerndat_fdinfo_has_lock(); + kerndat_lsm(); + return ret; } @@ -342,5 +345,7 @@ int kerndat_init_rst(void) if (!ret) ret = kerndat_has_memfd_create(); + kerndat_lsm(); + return ret; } diff --git a/lsm.c b/lsm.c index 90b395f5d..5acaa4244 100644 --- a/lsm.c +++ b/lsm.c @@ -102,7 +102,7 @@ static int selinux_get_label(pid_t pid, char **output) } #endif -static void get_host_lsm() +void kerndat_lsm() { if (access("/sys/kernel/security/apparmor", F_OK) == 0) { get_label = apparmor_get_label; @@ -132,17 +132,11 @@ static void get_host_lsm() Lsmtype host_lsm_type() { - if (name == NULL) - get_host_lsm(); - return lsmtype; } int collect_lsm_profile(pid_t pid, CredsEntry *ce) { - if (name == NULL) - get_host_lsm(); - ce->lsm_profile = NULL; if (lsmtype == LSMTYPE__NO_LSM) @@ -162,9 +156,6 @@ extern Lsmtype image_lsm; int validate_lsm(CredsEntry *ce) { - if (name == NULL) - get_host_lsm(); - if (image_lsm == LSMTYPE__NO_LSM || image_lsm == lsmtype) return 0;