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"
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;
}

View File

@@ -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);

View File

@@ -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

View File

@@ -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)