kernel: code clean up and some inlining
Signed-off-by: rsuntk <rsuntk@yukiprjkt.my.id>
This commit is contained in:
@@ -75,11 +75,11 @@ void on_post_fs_data(void)
|
|||||||
{
|
{
|
||||||
static bool done = false;
|
static bool done = false;
|
||||||
if (done) {
|
if (done) {
|
||||||
pr_info("on_post_fs_data already done\n");
|
pr_info("%s already done\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
done = true;
|
done = true;
|
||||||
pr_info("on_post_fs_data!\n");
|
pr_info("%s!\n", __func__);
|
||||||
ksu_load_allow_list();
|
ksu_load_allow_list();
|
||||||
// sanity check, this may influence the performance
|
// sanity check, this may influence the performance
|
||||||
stop_input_hook();
|
stop_input_hook();
|
||||||
@@ -523,18 +523,6 @@ static int sys_execve_handler_pre(struct kprobe *p, struct pt_regs *regs)
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove this later!
|
|
||||||
__maybe_unused static int vfs_read_handler_pre(struct kprobe *p,
|
|
||||||
struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
struct file **file_ptr = (struct file **)&PT_REGS_PARM1(regs);
|
|
||||||
char __user **buf_ptr = (char **)&PT_REGS_PARM2(regs);
|
|
||||||
size_t *count_ptr = (size_t *)&PT_REGS_PARM3(regs);
|
|
||||||
loff_t **pos_ptr = (loff_t **)&PT_REGS_CCALL_PARM4(regs);
|
|
||||||
|
|
||||||
return ksu_handle_vfs_read(file_ptr, buf_ptr, count_ptr, pos_ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sys_read_handler_pre(struct kprobe *p, struct pt_regs *regs)
|
static int sys_read_handler_pre(struct kprobe *p, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct pt_regs *real_regs = PT_REAL_REGS(regs);
|
struct pt_regs *real_regs = PT_REAL_REGS(regs);
|
||||||
@@ -554,35 +542,15 @@ static int input_handle_event_handler_pre(struct kprobe *p,
|
|||||||
return ksu_handle_input_handle_event(type, code, value);
|
return ksu_handle_input_handle_event(type, code, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
|
||||||
static struct kprobe execve_kp = {
|
static struct kprobe execve_kp = {
|
||||||
.symbol_name = SYS_EXECVE_SYMBOL,
|
.symbol_name = SYS_EXECVE_SYMBOL,
|
||||||
.pre_handler = sys_execve_handler_pre,
|
.pre_handler = sys_execve_handler_pre,
|
||||||
};
|
};
|
||||||
#else
|
|
||||||
static struct kprobe execve_kp = {
|
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0)
|
|
||||||
.symbol_name = "do_execveat_common",
|
|
||||||
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
|
|
||||||
.symbol_name = "__do_execve_file",
|
|
||||||
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
|
||||||
.symbol_name = "do_execveat_common",
|
|
||||||
#endif
|
|
||||||
.pre_handler = execve_handler_pre,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
static struct kprobe vfs_read_kp = {
|
static struct kprobe vfs_read_kp = {
|
||||||
.symbol_name = SYS_READ_SYMBOL,
|
.symbol_name = SYS_READ_SYMBOL,
|
||||||
.pre_handler = sys_read_handler_pre,
|
.pre_handler = sys_read_handler_pre,
|
||||||
};
|
};
|
||||||
#else
|
|
||||||
static struct kprobe vfs_read_kp = {
|
|
||||||
.symbol_name = "vfs_read",
|
|
||||||
.pre_handler = vfs_read_handler_pre,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct kprobe input_event_kp = {
|
static struct kprobe input_event_kp = {
|
||||||
.symbol_name = "input_event",
|
.symbol_name = "input_event",
|
||||||
|
|||||||
@@ -25,11 +25,15 @@
|
|||||||
#define SU_PATH "/system/bin/su"
|
#define SU_PATH "/system/bin/su"
|
||||||
#define SH_PATH "/system/bin/sh"
|
#define SH_PATH "/system/bin/sh"
|
||||||
|
|
||||||
|
static const char sh_path = SH_PATH;
|
||||||
|
static const char su_path = SU_PATH;
|
||||||
|
static const char ksud_path[] = KSUD_PATH;
|
||||||
|
|
||||||
extern void escape_to_root();
|
extern void escape_to_root();
|
||||||
|
|
||||||
bool ksu_sucompat_hook_state __read_mostly = true;
|
bool ksu_sucompat_hook_state __read_mostly = true;
|
||||||
|
|
||||||
static void __user *userspace_stack_buffer(const void *d, size_t len)
|
static inline void __user *userspace_stack_buffer(const void *d, size_t len)
|
||||||
{
|
{
|
||||||
/* To avoid having to mmap a page in userspace, just write below the stack
|
/* To avoid having to mmap a page in userspace, just write below the stack
|
||||||
* pointer. */
|
* pointer. */
|
||||||
@@ -38,26 +42,19 @@ static void __user *userspace_stack_buffer(const void *d, size_t len)
|
|||||||
return copy_to_user(p, d, len) ? NULL : p;
|
return copy_to_user(p, d, len) ? NULL : p;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char __user *sh_user_path(void)
|
static inline char __user *sh_user_path(void)
|
||||||
{
|
{
|
||||||
static const char sh_path[] = "/system/bin/sh";
|
|
||||||
|
|
||||||
return userspace_stack_buffer(sh_path, sizeof(sh_path));
|
return userspace_stack_buffer(sh_path, sizeof(sh_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
static char __user *ksud_user_path(void)
|
static inline char __user *ksud_user_path(void)
|
||||||
{
|
{
|
||||||
static const char ksud_path[] = KSUD_PATH;
|
|
||||||
|
|
||||||
return userspace_stack_buffer(ksud_path, sizeof(ksud_path));
|
return userspace_stack_buffer(ksud_path, sizeof(ksud_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,
|
int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,
|
||||||
int *__unused_flags)
|
int *__unused_flags)
|
||||||
{
|
{
|
||||||
|
|
||||||
const char su[] = SU_PATH;
|
|
||||||
|
|
||||||
#ifndef CONFIG_KSU_KPROBES_HOOK
|
#ifndef CONFIG_KSU_KPROBES_HOOK
|
||||||
if (!ksu_sucompat_hook_state) {
|
if (!ksu_sucompat_hook_state) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -82,9 +79,6 @@ int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,
|
|||||||
|
|
||||||
int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags)
|
int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags)
|
||||||
{
|
{
|
||||||
// const char sh[] = SH_PATH;
|
|
||||||
const char su[] = SU_PATH;
|
|
||||||
|
|
||||||
#ifndef CONFIG_KSU_KPROBES_HOOK
|
#ifndef CONFIG_KSU_KPROBES_HOOK
|
||||||
if (!ksu_sucompat_hook_state) {
|
if (!ksu_sucompat_hook_state) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -118,9 +112,6 @@ int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr,
|
|||||||
int *__never_use_flags)
|
int *__never_use_flags)
|
||||||
{
|
{
|
||||||
struct filename *filename;
|
struct filename *filename;
|
||||||
const char sh[] = KSUD_PATH;
|
|
||||||
const char su[] = SU_PATH;
|
|
||||||
|
|
||||||
#ifndef CONFIG_KSU_KPROBES_HOOK
|
#ifndef CONFIG_KSU_KPROBES_HOOK
|
||||||
if (!ksu_sucompat_hook_state) {
|
if (!ksu_sucompat_hook_state) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -153,7 +144,6 @@ int ksu_handle_execve_sucompat(int *fd, const char __user **filename_user,
|
|||||||
void *__never_use_argv, void *__never_use_envp,
|
void *__never_use_argv, void *__never_use_envp,
|
||||||
int *__never_use_flags)
|
int *__never_use_flags)
|
||||||
{
|
{
|
||||||
const char su[] = SU_PATH;
|
|
||||||
char path[sizeof(su) + 1];
|
char path[sizeof(su) + 1];
|
||||||
|
|
||||||
if (unlikely(!filename_user))
|
if (unlikely(!filename_user))
|
||||||
|
|||||||
Reference in New Issue
Block a user