diff --git a/kernel/selinux/rules.c b/kernel/selinux/rules.c index 9f0de2a7..caddefdb 100644 --- a/kernel/selinux/rules.c +++ b/kernel/selinux/rules.c @@ -36,14 +36,19 @@ static struct policydb *get_policydb(void) return db; } +static DEFINE_MUTEX(ksu_rules); + void apply_kernelsu_rules() { + struct policydb *db; + if (!getenforce()) { pr_info("SELinux permissive or disabled, apply rules!\n"); } - rcu_read_lock(); - struct policydb *db = get_policydb(); + mutex_lock(&ksu_rules); + + db = get_policydb(); ksu_permissive(db, KERNEL_SU_DOMAIN); ksu_typeattribute(db, KERNEL_SU_DOMAIN, "mlstrustedsubject"); @@ -135,7 +140,7 @@ void apply_kernelsu_rules() ksu_allow(db, "system_server", KERNEL_SU_DOMAIN, "process", "getpgid"); ksu_allow(db, "system_server", KERNEL_SU_DOMAIN, "process", "sigkill"); - rcu_read_unlock(); + mutex_unlock(&ksu_rules); } #define MAX_SEPOL_LEN 128