diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c index 57b24e452..b9d47103a 100644 --- a/Xext/xselinux_hooks.c +++ b/Xext/xselinux_hooks.c @@ -324,6 +324,21 @@ SELinuxLog(int type, const char *fmt, ...) return 0; } +static int +SELinuxPolicyLoad(int seqno) +{ + LogMessage(X_INFO, "SELinux: PolicyLoad (%d) detected, remapping security classes\n", seqno); + + if (selinux_set_mapping(map) < 0) { + if (errno == EINVAL) + ErrorF("SELinux: Invalid object class mapping\n"); + else + ErrorF("SELinux: Failed to set up security class mapping\n"); + } + + return 0; +} + /* * XACE Callbacks */ @@ -865,9 +880,9 @@ SELinuxFlaskInit(void) } /* Set up SELinux stuff */ - selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback) SELinuxLog); - selinux_set_callback(SELINUX_CB_AUDIT, - (union selinux_callback) SELinuxAudit); + selinux_set_callback(SELINUX_CB_LOG, (union selinux_callback) { .func_log = SELinuxLog }); + selinux_set_callback(SELINUX_CB_AUDIT, (union selinux_callback) { .func_audit = SELinuxAudit }); + selinux_set_callback(SELINUX_CB_POLICYLOAD, (union selinux_callback) { .func_policyload = SELinuxPolicyLoad }); if (selinux_set_mapping(map) < 0) { if (errno == EINVAL) {