diff --git a/drivers/kernelsu/core_hook.c b/drivers/kernelsu/core_hook.c index edd41f8b40d3..16b27393d048 100644 --- a/drivers/kernelsu/core_hook.c +++ b/drivers/kernelsu/core_hook.c @@ -179,7 +179,7 @@ static void setup_groups(struct root_profile *profile, struct cred *cred) set_groups(cred, group_info); } -static void disable_seccomp() +static void disable_seccomp(void) { assert_spin_locked(¤t->sighand->siglock); // disable seccomp @@ -201,6 +201,7 @@ void ksu_escape_to_root(void) { struct cred *cred; +#ifdef KSU_GET_CRED_RCU rcu_read_lock(); do { @@ -213,6 +214,15 @@ void ksu_escape_to_root(void) rcu_read_unlock(); return; } +#else + cred = (struct cred *)__task_cred(current); + + if (cred->euid.val == 0) { + pr_warn("Already root, don't escape!\n"); + return; + } +#endif + struct root_profile *profile = ksu_get_root_profile(cred->uid.val); cred->uid.val = profile->uid; @@ -249,8 +259,10 @@ void ksu_escape_to_root(void) sizeof(cred->cap_ambient)); setup_groups(profile, cred); - + +#ifdef KSU_GET_CRED_RCU rcu_read_unlock(); +#endif // Refer to kernel/seccomp.c: seccomp_set_mode_strict // When disabling Seccomp, ensure that current->sighand->siglock is held during the operation.