kernel: unify workqueue

This commit is contained in:
weishu
2023-01-18 18:37:06 +07:00
parent 5b2efd65b1
commit 830c27361e
4 changed files with 20 additions and 9 deletions

View File

@@ -38,7 +38,6 @@ static struct list_head allow_list;
#define KERNEL_SU_ALLOWLIST "/data/adb/.ksu_allowlist" #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_save_work;
static struct work_struct ksu_load_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)); pr_err("load_allow_list open '/data/adb': %d\n", PTR_ERR(fp));
if (errno == -ENOENT) { if (errno == -ENOENT) {
msleep(2000); msleep(2000);
queue_work(ksu_workqueue, &ksu_load_work); ksu_queue_work(&ksu_load_work);
return; return;
} else { } else {
pr_info("load_allow list dir exist now!"); 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) 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_save_work, do_persistent_allow_list);
INIT_WORK(&ksu_load_work, do_load_allow_list); INIT_WORK(&ksu_load_work, do_load_allow_list);
return 0; return 0;
@@ -268,13 +266,13 @@ static int init_work(void)
// make sure allow list works cross boot // make sure allow list works cross boot
bool persistent_allow_list(void) bool persistent_allow_list(void)
{ {
queue_work(ksu_workqueue, &ksu_save_work); ksu_queue_work(&ksu_save_work);
return true; return true;
} }
bool ksu_load_allow_list(void) bool ksu_load_allow_list(void)
{ {
queue_work(ksu_workqueue, &ksu_load_work); ksu_queue_work(&ksu_load_work);
return true; return true;
} }
@@ -292,7 +290,5 @@ bool ksu_allowlist_init(void)
bool ksu_allowlist_exit(void) bool ksu_allowlist_exit(void)
{ {
destroy_workqueue(ksu_workqueue);
return true; return true;
} }

View File

@@ -13,6 +13,7 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/uidgid.h> #include <linux/uidgid.h>
#include <linux/version.h> #include <linux/version.h>
#include <linux/workqueue.h>
#include <linux/fdtable.h> #include <linux/fdtable.h>
#include <linux/fs.h> #include <linux/fs.h>
@@ -32,8 +33,14 @@
static struct group_info root_groups = { .usage = ATOMIC_INIT(2) }; static struct group_info root_groups = { .usage = ATOMIC_INIT(2) };
static struct workqueue_struct *ksu_workqueue;
uid_t ksu_manager_uid = INVALID_UID; uid_t ksu_manager_uid = INVALID_UID;
void ksu_queue_work(struct work_struct *work) {
queue_work(ksu_workqueue, work);
}
void escape_to_root() void escape_to_root()
{ {
struct cred *cred; struct cred *cred;
@@ -315,6 +322,8 @@ int kernelsu_init(void)
pr_alert("You are running DEBUG version of KernelSU"); pr_alert("You are running DEBUG version of KernelSU");
#endif #endif
ksu_workqueue = alloc_workqueue("kernelsu_work_queue", 0, 0);
ksu_allowlist_init(); ksu_allowlist_init();
rc = register_kprobe(&kp); rc = register_kprobe(&kp);
@@ -337,6 +346,8 @@ void kernelsu_exit(void)
unregister_kprobe(&kp); unregister_kprobe(&kp);
ksu_allowlist_exit(); ksu_allowlist_exit();
destroy_workqueue(ksu_workqueue);
} }
module_init(kernelsu_init); module_init(kernelsu_init);

View File

@@ -1,7 +1,9 @@
#ifndef __KSU_H_KSU #ifndef __KSU_H_KSU
#define __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_VERSION 9
#define KERNEL_SU_OPTION 0xDEADBEEF #define KERNEL_SU_OPTION 0xDEADBEEF
@@ -35,4 +37,6 @@ static inline void ksu_invalidate_manager_uid() {
ksu_manager_uid = INVALID_UID; ksu_manager_uid = INVALID_UID;
} }
void ksu_queue_work(struct work_struct *work);
#endif #endif

View File

@@ -123,7 +123,7 @@ out:
static void update_uid() 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) static int renameat_handler_pre(struct kprobe *p, struct pt_regs *regs)