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"
|
#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;
|
||||||
}
|
}
|
||||||
11
kernel/ksu.c
11
kernel/ksu.c
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user