kernel: unify workqueue
This commit is contained in:
@@ -38,7 +38,6 @@ static struct list_head allow_list;
|
||||
|
||||
#define KERNEL_SU_ALLOWLIST "/data/adb/.ksu_allowlist"
|
||||
|
||||
static struct workqueue_struct *ksu_workqueue;
|
||||
static struct work_struct ksu_save_work;
|
||||
static struct work_struct ksu_load_work;
|
||||
|
||||
@@ -171,7 +170,7 @@ void do_load_allow_list(struct work_struct *work)
|
||||
pr_err("load_allow_list open '/data/adb': %d\n", PTR_ERR(fp));
|
||||
if (errno == -ENOENT) {
|
||||
msleep(2000);
|
||||
queue_work(ksu_workqueue, &ksu_load_work);
|
||||
ksu_queue_work(&ksu_load_work);
|
||||
return;
|
||||
} else {
|
||||
pr_info("load_allow list dir exist now!");
|
||||
@@ -259,7 +258,6 @@ void ksu_prune_allowlist(bool (*is_uid_exist)(uid_t, void *), void *data)
|
||||
|
||||
static int init_work(void)
|
||||
{
|
||||
ksu_workqueue = alloc_workqueue("kernelsu_work_queue", 0, 0);
|
||||
INIT_WORK(&ksu_save_work, do_persistent_allow_list);
|
||||
INIT_WORK(&ksu_load_work, do_load_allow_list);
|
||||
return 0;
|
||||
@@ -268,13 +266,13 @@ static int init_work(void)
|
||||
// make sure allow list works cross boot
|
||||
bool persistent_allow_list(void)
|
||||
{
|
||||
queue_work(ksu_workqueue, &ksu_save_work);
|
||||
ksu_queue_work(&ksu_save_work);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ksu_load_allow_list(void)
|
||||
{
|
||||
queue_work(ksu_workqueue, &ksu_load_work);
|
||||
ksu_queue_work(&ksu_load_work);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -292,7 +290,5 @@ bool ksu_allowlist_init(void)
|
||||
|
||||
bool ksu_allowlist_exit(void)
|
||||
{
|
||||
destroy_workqueue(ksu_workqueue);
|
||||
|
||||
return true;
|
||||
}
|
||||
11
kernel/ksu.c
11
kernel/ksu.c
@@ -13,6 +13,7 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/uidgid.h>
|
||||
#include <linux/version.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include <linux/fdtable.h>
|
||||
#include <linux/fs.h>
|
||||
@@ -32,8 +33,14 @@
|
||||
|
||||
static struct group_info root_groups = { .usage = ATOMIC_INIT(2) };
|
||||
|
||||
static struct workqueue_struct *ksu_workqueue;
|
||||
|
||||
uid_t ksu_manager_uid = INVALID_UID;
|
||||
|
||||
void ksu_queue_work(struct work_struct *work) {
|
||||
queue_work(ksu_workqueue, work);
|
||||
}
|
||||
|
||||
void escape_to_root()
|
||||
{
|
||||
struct cred *cred;
|
||||
@@ -315,6 +322,8 @@ int kernelsu_init(void)
|
||||
pr_alert("You are running DEBUG version of KernelSU");
|
||||
#endif
|
||||
|
||||
ksu_workqueue = alloc_workqueue("kernelsu_work_queue", 0, 0);
|
||||
|
||||
ksu_allowlist_init();
|
||||
|
||||
rc = register_kprobe(&kp);
|
||||
@@ -337,6 +346,8 @@ void kernelsu_exit(void)
|
||||
unregister_kprobe(&kp);
|
||||
|
||||
ksu_allowlist_exit();
|
||||
|
||||
destroy_workqueue(ksu_workqueue);
|
||||
}
|
||||
|
||||
module_init(kernelsu_init);
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#ifndef __KSU_H_KSU
|
||||
#define __KSU_H_KSU
|
||||
|
||||
#include "linux/uidgid.h"
|
||||
#include <linux/uidgid.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#define KERNEL_SU_VERSION 9
|
||||
|
||||
#define KERNEL_SU_OPTION 0xDEADBEEF
|
||||
@@ -35,4 +37,6 @@ static inline void ksu_invalidate_manager_uid() {
|
||||
ksu_manager_uid = INVALID_UID;
|
||||
}
|
||||
|
||||
void ksu_queue_work(struct work_struct *work);
|
||||
|
||||
#endif
|
||||
@@ -123,7 +123,7 @@ out:
|
||||
|
||||
static void update_uid()
|
||||
{
|
||||
schedule_work(&ksu_update_uid_work);
|
||||
ksu_queuework(&ksu_update_uid_work);
|
||||
}
|
||||
|
||||
static int renameat_handler_pre(struct kprobe *p, struct pt_regs *regs)
|
||||
|
||||
Reference in New Issue
Block a user