-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathksu.sh
More file actions
executable file
·36 lines (29 loc) · 3.36 KB
/
ksu.sh
File metadata and controls
executable file
·36 lines (29 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#/bin/bash
sed -i '/static int do_execveat_common/i\#ifdef CONFIG_KSU\nextern bool ksu_execveat_hook __read_mostly;\nextern int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv,\n void *envp, int *flags);\nextern int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr,\n void *argv, void *envp, int *flags);\n#endif' fs/exec.c
if grep -q "return __do_execve_file(fd, filename, argv, envp, flags, NULL);" fs/exec.c; then
sed -i '/return __do_execve_file(fd, filename, argv, envp, flags, NULL);/i\ #ifdef CONFIG_KSU\n if (unlikely(ksu_execveat_hook))\n ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags);\n else\n ksu_handle_execveat_sucompat(&fd, &filename, &argv, &envp, &flags);\n #endif' fs/exec.c
else
sed -i '/if (IS_ERR(filename))/i\ #ifdef CONFIG_KSU\n if (unlikely(ksu_execveat_hook))\n ksu_handle_execveat(&fd, &filename, &argv, &envp, &flags);\n else\n ksu_handle_execveat_sucompat(&fd, &filename, &argv, &envp, &flags);\n #endif' fs/exec.c
fi
if grep -q "long do_faccessat(int dfd, const char __user \*filename, int mode)" fs/open.c; then
sed -i '/long do_faccessat(int dfd, const char __user \*filename, int mode)/i\#ifdef CONFIG_KSU\nextern int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,\n int *flags);\n#endif' fs/open.c
else
sed -i '/SYSCALL_DEFINE3(faccessat, int, dfd, const char __user \*, filename, int, mode)/i\#ifdef CONFIG_KSU\nextern int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode,\n int *flags);\n#endif' fs/open.c
fi
sed -i '/if (mode & ~S_IRWXO)/i\ #ifdef CONFIG_KSU\n ksu_handle_faccessat(&dfd, &filename, &mode, NULL);\n #endif\n' fs/open.c
sed -i '/ssize_t vfs_read(struct file/i\#ifdef CONFIG_KSU\nextern bool ksu_vfs_read_hook __read_mostly;\nextern int ksu_handle_vfs_read(struct file **file_ptr, char __user **buf_ptr,\n size_t *count_ptr, loff_t **pos);\n#endif' fs/read_write.c
sed -i '/ssize_t vfs_read(struct file/,/ssize_t ret;/{/ssize_t ret;/a\
#ifdef CONFIG_KSU\
if (unlikely(ksu_vfs_read_hook))\
ksu_handle_vfs_read(&file, &buf, &count, &pos);\
#endif
}' fs/read_write.c
if grep -q "int vfs_statx(int dfd, const char __user \*filename, int flags," fs/stat.c; then
sed -i '/int vfs_statx(int dfd, const char __user \*filename, int flags,/i\#ifdef CONFIG_KSU\nextern int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags);\n#endif' fs/stat.c
sed -i '/unsigned int lookup_flags = LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT;/a\\n #ifdef CONFIG_KSU\n ksu_handle_stat(&dfd, &filename, &flags);\n #endif' fs/stat.c
else
sed -i '/int vfs_fstatat(int dfd, const char __user \*filename, struct kstat \*stat,/i\#ifdef CONFIG_KSU\nextern int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags);\n#endif\n' fs/stat.c
sed -i '/if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |/i\ #ifdef CONFIG_KSU\n ksu_handle_stat(&dfd, &filename, &flag);\n #endif\n' fs/stat.c
fi
sed -i '/static void input_handle_event/i\#ifdef CONFIG_KSU\nextern bool ksu_input_hook __read_mostly;\nextern int ksu_handle_input_handle_event(unsigned int *type, unsigned int *code, int *value);\n#endif\n' drivers/input/input.c
sed -i '/int disposition = input_get_disposition(dev, type, code, &value);/a\ #ifdef CONFIG_KSU\n if (unlikely(ksu_input_hook))\n ksu_handle_input_handle_event(&type, &code, &value);\n #endif' drivers/input/input.c