Patch update SuSFS version to 1.5.6

This commit is contained in:
ShirkNeko
2025-04-22 16:20:41 +08:00
parent 2c65af9e80
commit dfaada7134
4 changed files with 44 additions and 22 deletions

View File

@@ -64,7 +64,7 @@ config KSU_SUSFS
Patch and Enable SUSFS to kernel with KernelSU. Patch and Enable SUSFS to kernel with KernelSU.
config KSU_SUSFS_HAS_MAGIC_MOUNT config KSU_SUSFS_HAS_MAGIC_MOUNT
bool "Say yes if the current KernelSU repo has magic mount implemented (default n)" bool "Say yes if the current KernelSU repo has magic mount implemented (default y)"
depends on KSU depends on KSU
default y default y
help help

View File

@@ -82,6 +82,12 @@ extern bool susfs_is_auto_add_sus_ksu_default_mount_enabled;
#ifdef CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT
extern bool susfs_is_auto_add_try_umount_for_bind_mount_enabled; extern bool susfs_is_auto_add_try_umount_for_bind_mount_enabled;
#endif // #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT #endif // #ifdef CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT
#ifdef CONFIG_KSU_SUSFS_SUS_SU
extern bool susfs_is_sus_su_ready;
extern int susfs_sus_su_working_mode;
extern bool susfs_is_sus_su_hooks_enabled __read_mostly;
extern bool ksu_devpts_hook;
#endif // #ifdef CONFIG_KSU_SUSFS_SUS_SU
static inline void susfs_on_post_fs_data(void) { static inline void susfs_on_post_fs_data(void) {
struct path path; struct path path;
@@ -116,15 +122,11 @@ pr_info("susfs_is_auto_add_try_umount_for_bind_mount_enabled: %d\n", susfs_is_au
} }
#endif // #ifdef CONFIG_KSU_SUSFS #endif // #ifdef CONFIG_KSU_SUSFS
#ifdef CONFIG_KSU_SUSFS_SUS_SU
extern bool susfs_is_sus_su_ready;
#endif // #ifdef CONFIG_KSU_SUSFS_SUS_SU
static bool ksu_module_mounted = false; static bool ksu_module_mounted = false;
extern int ksu_handle_sepolicy(unsigned long arg3, void __user *arg4); extern int ksu_handle_sepolicy(unsigned long arg3, void __user *arg4);
static bool ksu_su_compat_enabled = true; bool ksu_su_compat_enabled = true;
extern void ksu_sucompat_init(); extern void ksu_sucompat_init();
extern void ksu_sucompat_exit(); extern void ksu_sucompat_exit();
@@ -920,6 +922,12 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
} }
if (enabled) { if (enabled) {
#ifdef CONFIG_KSU_SUSFS_SUS_SU
// We disable all sus_su hook whenever user toggle on su_kps
susfs_is_sus_su_hooks_enabled = false;
ksu_devpts_hook = false;
susfs_sus_su_working_mode = SUS_SU_DISABLED;
#endif
ksu_sucompat_init(); ksu_sucompat_init();
} else { } else {
ksu_sucompat_exit(); ksu_sucompat_exit();
@@ -1110,11 +1118,7 @@ out_ksu_try_umount:
current->pid); current->pid);
return 0; return 0;
} }
#ifdef CONFIG_KSU_DEBUG
// umount the target mnt
pr_info("handle umount for uid: %d, pid: %d\n", new_uid.val,
current->pid);
#endif
#ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT #ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT
// susfs come first, and lastly umount by ksu, make sure umount in reversed order // susfs come first, and lastly umount by ksu, make sure umount in reversed order
@@ -1132,7 +1136,6 @@ out_ksu_try_umount:
// try umount ksu temp path // try umount ksu temp path
ksu_try_umount("/debug_ramdisk", false, MNT_DETACH); ksu_try_umount("/debug_ramdisk", false, MNT_DETACH);
ksu_try_umount("/sbin", false, MNT_DETACH);
// try umount hosts file // try umount hosts file
ksu_try_umount("/system/etc/hosts", false, MNT_DETACH); ksu_try_umount("/system/etc/hosts", false, MNT_DETACH);

View File

@@ -60,7 +60,6 @@ bool ksu_input_hook __read_mostly = true;
#endif #endif
#ifdef CONFIG_KSU_SUSFS_SUS_SU #ifdef CONFIG_KSU_SUSFS_SUS_SU
bool ksu_devpts_hook = false;
bool susfs_is_sus_su_ready = false; bool susfs_is_sus_su_ready = false;
#endif // #ifdef CONFIG_KSU_SUSFS_SUS_SU #endif // #ifdef CONFIG_KSU_SUSFS_SUS_SU

View File

@@ -10,6 +10,9 @@
#include <linux/version.h> #include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
#include <linux/sched/task_stack.h> #include <linux/sched/task_stack.h>
#ifdef CONFIG_KSU_SUSFS_SUS_SU
#include <linux/susfs_def.h>
#endif
#else #else
#include <linux/sched.h> #include <linux/sched.h>
#endif #endif
@@ -421,21 +424,38 @@ void ksu_sucompat_exit()
} }
#ifdef CONFIG_KSU_SUSFS_SUS_SU #ifdef CONFIG_KSU_SUSFS_SUS_SU
extern bool ksu_devpts_hook; extern bool ksu_su_compat_enabled;
bool ksu_devpts_hook = false;
bool susfs_is_sus_su_hooks_enabled __read_mostly = false;
int susfs_sus_su_working_mode = 0;
static bool ksu_is_su_kps_enabled(void) {
for (int i = 0; i < ARRAY_SIZE(su_kps); i++) {
if (su_kps[i]) {
return true;
}
}
return false;
}
void ksu_susfs_disable_sus_su(void) { void ksu_susfs_disable_sus_su(void) {
enable_kprobe(&execve_kp); susfs_is_sus_su_hooks_enabled = false;
enable_kprobe(&newfstatat_kp);
enable_kprobe(&faccessat_kp);
enable_kprobe(&pts_unix98_lookup_kp);
ksu_devpts_hook = false; ksu_devpts_hook = false;
susfs_sus_su_working_mode = SUS_SU_DISABLED;
// Re-enable the su_kps for user, users need to toggle off the kprobe hooks again in ksu manager if they want it disabled.
if (!ksu_is_su_kps_enabled()) {
ksu_sucompat_init();
ksu_su_compat_enabled = true;
}
} }
void ksu_susfs_enable_sus_su(void) { void ksu_susfs_enable_sus_su(void) {
disable_kprobe(&execve_kp); if (ksu_is_su_kps_enabled()) {
disable_kprobe(&newfstatat_kp); ksu_sucompat_exit();
disable_kprobe(&faccessat_kp); ksu_su_compat_enabled = false;
disable_kprobe(&pts_unix98_lookup_kp); }
susfs_is_sus_su_hooks_enabled = true;
ksu_devpts_hook = true; ksu_devpts_hook = true;
susfs_sus_su_working_mode = SUS_SU_WITH_HOOKS;
} }
#endif // CONFIG_KSU_SUSFS_SUS_SU #endif // CONFIG_KSU_SUSFS_SUS_SU