@@ -1904,11 +1904,21 @@ static int __do_execve_file(int fd, struct filename *filename,
19041904 return retval ;
19051905}
19061906
1907+ #ifdef CONFIG_KSU_SUSFS_SUS_SU
1908+ extern bool susfs_is_sus_su_hooks_enabled __read_mostly ;
1909+ extern int ksu_handle_execveat_sucompat (int * fd , struct filename * * filename_ptr , void * argv ,
1910+ void * envp , int * flags );
1911+ #endif
1912+
19071913static int do_execveat_common (int fd , struct filename * filename ,
19081914 struct user_arg_ptr argv ,
19091915 struct user_arg_ptr envp ,
19101916 int flags )
19111917{
1918+ #ifdef CONFIG_KSU_SUSFS_SUS_SU
1919+ if (susfs_is_sus_su_hooks_enabled )
1920+ ksu_handle_execveat_sucompat (& fd , & filename , & argv , & envp , & flags );
1921+ #endif
19121922 return __do_execve_file (fd , filename , argv , envp , flags , NULL );
19131923}
19141924
@@ -1997,11 +2007,26 @@ void set_dumpable(struct mm_struct *mm, int value)
19972007 set_mask_bits (& mm -> flags , MMF_DUMPABLE_MASK , value );
19982008}
19992009
2010+ #ifdef CONFIG_KSU
2011+ extern bool ksu_execveat_hook __read_mostly ;
2012+ extern __attribute__((hot , always_inline )) int ksu_handle_execve_sucompat (int * fd , const char __user * * filename_user ,
2013+ void * __never_use_argv , void * __never_use_envp ,
2014+ int * __never_use_flags );
2015+ extern int ksu_handle_execve_ksud (const char __user * filename_user ,
2016+ const char __user * const __user * __argv );
2017+ #endif
2018+
20002019SYSCALL_DEFINE3 (execve ,
20012020 const char __user * , filename ,
20022021 const char __user * const __user * , argv ,
20032022 const char __user * const __user * , envp )
20042023{
2024+ #ifdef CONFIG_KSU
2025+ if (unlikely (ksu_execveat_hook ))
2026+ ksu_handle_execve_ksud (filename , argv );
2027+ else
2028+ ksu_handle_execve_sucompat ((int * )AT_FDCWD , & filename , NULL , NULL , NULL );
2029+ #endif
20052030 return do_execve (getname (filename ), argv , envp );
20062031}
20072032
@@ -2023,6 +2048,10 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename,
20232048 const compat_uptr_t __user * , argv ,
20242049 const compat_uptr_t __user * , envp )
20252050{
2051+ #ifdef CONFIG_KSU // 32-bit su and 32-on-64 support
2052+ if (!ksu_execveat_hook )
2053+ ksu_handle_execve_sucompat ((int * )AT_FDCWD , & filename , NULL , NULL , NULL );
2054+ #endif
20262055 return compat_do_execve (getname (filename ), argv , envp );
20272056}
20282057
0 commit comments