kernel: clean memory when exit

This commit is contained in:
weishu 2024-03-24 16:41:45 +08:00
parent 5167dc7352
commit 858ec910fd
6 changed files with 40 additions and 13 deletions

View File

@ -838,5 +838,9 @@ void __init ksu_core_init(void)
void ksu_core_exit(void)
{
pr_info("ksu_kprobe_exit\n");
#ifdef CONFIG_KPROBES
pr_info("ksu_core_kprobe_exit\n");
// we dont use this now
// ksu_kprobe_exit();
#endif
}

View File

@ -32,8 +32,10 @@ int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv,
flags);
}
extern void ksu_enable_sucompat();
extern void ksu_enable_ksud();
extern void ksu_sucompat_init();
extern void ksu_sucompat_exit();
extern void ksu_ksud_init();
extern void ksu_ksud_exit();
int __init kernelsu_init(void)
{
@ -56,8 +58,8 @@ int __init kernelsu_init(void)
ksu_throne_tracker_init();
#ifdef CONFIG_KPROBES
ksu_enable_sucompat();
ksu_enable_ksud();
ksu_sucompat_init();
ksu_ksud_init();
#else
pr_alert("KPROBES is disabled, KernelSU may not work, please check https://kernelsu.org/guide/how-to-integrate-for-non-gki.html");
#endif
@ -78,6 +80,11 @@ void kernelsu_exit(void)
destroy_workqueue(ksu_workqueue);
#ifdef CONFIG_KPROBES
ksu_ksud_exit();
ksu_sucompat_exit();
#endif
ksu_core_exit();
}

View File

@ -589,7 +589,7 @@ static void stop_input_hook()
}
// ksud: module support
void ksu_enable_ksud()
void ksu_ksud_init()
{
#ifdef CONFIG_KPROBES
int ret;
@ -608,3 +608,12 @@ void ksu_enable_ksud()
INIT_WORK(&stop_input_hook_work, do_stop_input_hook);
#endif
}
void ksu_ksud_exit() {
#ifdef CONFIG_KPROBES
unregister_kprobe(&execve_kp);
// this should be done before unregister vfs_read_kp
// unregister_kprobe(&vfs_read_kp);
unregister_kprobe(&input_handle_event_kp);
#endif
}

View File

@ -242,7 +242,7 @@ static struct kprobe execve_kp = {
#endif
// sucompat: permited process can execute 'su' to gain root access.
void ksu_enable_sucompat()
void ksu_sucompat_init()
{
#ifdef CONFIG_KPROBES
int ret;
@ -254,3 +254,11 @@ void ksu_enable_sucompat()
pr_info("sucompat: faccessat_kp: %d\n", ret);
#endif
}
void ksu_sucompat_exit() {
#ifdef CONFIG_KPROBES
unregister_kprobe(&execve_kp);
unregister_kprobe(&newfstatat_kp);
unregister_kprobe(&faccessat_kp);
#endif
}

View File

@ -308,13 +308,12 @@ void track_throne()
ksu_queue_work(&ksu_update_uid_work);
}
int ksu_throne_tracker_init()
void ksu_throne_tracker_init()
{
INIT_WORK(&ksu_update_uid_work, do_update_uid);
return 0;
}
int ksu_throne_tracker_exit()
void ksu_throne_tracker_exit()
{
return 0;
// nothing to do
}

View File

@ -1,9 +1,9 @@
#ifndef __KSU_H_UID_OBSERVER
#define __KSU_H_UID_OBSERVER
int ksu_throne_tracker_init();
void ksu_throne_tracker_init();
int ksu_throne_tracker_exit();
void ksu_throne_tracker_exit();
void track_throne();