From cb01bf428d5d689d25b84db38e227ae82c6c9a87 Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Wed, 24 Sep 2025 01:27:04 +0800 Subject: [PATCH] kernel: Simplify and remove `user_arg_ptr` `ksu_handle_execveat_ksud` - Migrate `ksu_handle_execveat` to sucompat --- kernel/ksu.c | 11 ----------- kernel/ksud.c | 21 --------------------- kernel/sucompat.c | 6 ++++++ 3 files changed, 6 insertions(+), 32 deletions(-) diff --git a/kernel/ksu.c b/kernel/ksu.c index ae44c8f0..37a17548 100644 --- a/kernel/ksu.c +++ b/kernel/ksu.c @@ -21,17 +21,6 @@ bool ksu_queue_work(struct work_struct *work) extern int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr, void *argv, void *envp, int *flags); -extern int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr, - void *argv, void *envp, int *flags); - -int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv, - void *envp, int *flags) -{ - ksu_handle_execveat_ksud(fd, filename_ptr, argv, envp, flags); - return ksu_handle_execveat_sucompat(fd, filename_ptr, argv, envp, - flags); -} - extern void ksu_sucompat_init(); extern void ksu_sucompat_exit(); extern void ksu_ksud_init(); diff --git a/kernel/ksud.c b/kernel/ksud.c index ac8e14cb..91bcbb91 100644 --- a/kernel/ksud.c +++ b/kernel/ksud.c @@ -83,18 +83,6 @@ void on_post_fs_data(void) is_boot_phase = false; } -struct user_arg_ptr { -#ifdef CONFIG_COMPAT - bool is_compat; -#endif - union { - const char __user *const __user *native; -#ifdef CONFIG_COMPAT - const compat_uptr_t __user *compat; -#endif - } ptr; -}; - // since _ksud handler only uses argv and envp for comparisons // this can probably work // adapted from ksu_handle_execveat_ksud @@ -251,15 +239,6 @@ int ksu_handle_pre_ksud(const char *filename) return ksu_handle_bprm_ksud(filename, argv1, envp, envp_copy_len); } -int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr, - struct user_arg_ptr *argv, struct user_arg_ptr *envp, - int *flags) -{ - // this is now handled via security_bprm_check - // we only keep this for the sake of old hooks. - return 0; -} - static ssize_t (*orig_read)(struct file *, char __user *, size_t, loff_t *); static ssize_t (*orig_read_iter)(struct kiocb *, struct iov_iter *); static struct file_operations fops_proxy; diff --git a/kernel/sucompat.c b/kernel/sucompat.c index 6a079c83..a7a14dc9 100644 --- a/kernel/sucompat.c +++ b/kernel/sucompat.c @@ -121,6 +121,12 @@ int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags) return 0; } +int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv, + void *envp, int *flags) +{ + return ksu_handle_execveat_sucompat(fd, filename_ptr, argv, envp, flags); +} + // the call from execve_handler_pre won't provided correct value for __never_use_argument, use them after fix execve_handler_pre, keeping them for consistence for manually patched code int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr, void *__never_use_argv, void *__never_use_envp,