diff --git a/kernel/allowlist.c b/kernel/allowlist.c index a0af8676..8d2ad8e2 100644 --- a/kernel/allowlist.c +++ b/kernel/allowlist.c @@ -382,21 +382,20 @@ static void do_persistent_allow_list(struct callback_head *_cb) if (IS_ERR(fp)) { pr_err("save_allow_list create file failed: %ld\n", PTR_ERR(fp)); - mutex_unlock(&allowlist_mutex); - return; + goto unlock; } // store magic and version if (ksu_kernel_write_compat(fp, &magic, sizeof(magic), &off) != sizeof(magic)) { pr_err("save_allow_list write magic failed.\n"); - goto exit; + goto close_file; } if (ksu_kernel_write_compat(fp, &version, sizeof(version), &off) != sizeof(version)) { pr_err("save_allow_list write version failed.\n"); - goto exit; + goto close_file; } list_for_each (pos, &allow_list) { @@ -409,9 +408,11 @@ static void do_persistent_allow_list(struct callback_head *_cb) &off); } -exit: +close_file: filp_close(fp, 0); +unlock: mutex_unlock(&allowlist_mutex); + kfree(_cb); } void persistent_allow_list(void) diff --git a/kernel/supercalls.c b/kernel/supercalls.c index f35abac3..e62b8788 100644 --- a/kernel/supercalls.c +++ b/kernel/supercalls.c @@ -348,7 +348,7 @@ static int do_set_feature(void __user *arg) static int do_get_wrapper_fd(void __user *arg) { if (!ksu_file_sid) { - return -1; + return -EINVAL; } const char *anon_name = "[ksu_fdwrapper]";