diff --git a/kernel/core_hook.c b/kernel/core_hook.c index 288ebef4..5fdbd14c 100644 --- a/kernel/core_hook.c +++ b/kernel/core_hook.c @@ -867,8 +867,11 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3, } if (arg2 == CMD_SUSFS_SHOW_ENABLED_FEATURES) { int error = 0; - u64 enabled_features = 0; - if (!ksu_access_ok((void __user*)arg3, sizeof(u64))) { + if (arg4 <= 0) { + pr_err("susfs: CMD_SUSFS_SHOW_ENABLED_FEATURES -> arg4 cannot be <= 0\n"); + return 0; + } + if (!ksu_access_ok((void __user*)arg3, arg4)) { pr_err("susfs: CMD_SUSFS_SHOW_ENABLED_FEATURES -> arg3 is not accessible\n"); return 0; } @@ -876,49 +879,7 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3, pr_err("susfs: CMD_SUSFS_SHOW_ENABLED_FEATURES -> arg5 is not accessible\n"); return 0; } -#ifdef CONFIG_KSU_SUSFS_SUS_PATH - enabled_features |= (1 << 0); -#endif -#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT - enabled_features |= (1 << 1); -#endif -#ifdef CONFIG_KSU_SUSFS_AUTO_ADD_SUS_KSU_DEFAULT_MOUNT - enabled_features |= (1 << 2); -#endif -#ifdef CONFIG_KSU_SUSFS_AUTO_ADD_SUS_BIND_MOUNT - enabled_features |= (1 << 3); -#endif -#ifdef CONFIG_KSU_SUSFS_SUS_KSTAT - enabled_features |= (1 << 4); -#endif -#ifdef CONFIG_KSU_SUSFS_TRY_UMOUNT - enabled_features |= (1 << 5); -#endif -#ifdef CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT - enabled_features |= (1 << 6); -#endif -#ifdef CONFIG_KSU_SUSFS_SPOOF_UNAME - enabled_features |= (1 << 7); -#endif -#ifdef CONFIG_KSU_SUSFS_ENABLE_LOG - enabled_features |= (1 << 8); -#endif -#ifdef CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS - enabled_features |= (1 << 9); -#endif -#ifdef CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG - enabled_features |= (1 << 10); -#endif -#ifdef CONFIG_KSU_SUSFS_OPEN_REDIRECT - enabled_features |= (1 << 11); -#endif -#ifdef CONFIG_KSU_SUSFS_HAS_MAGIC_MOUNT - enabled_features |= (1 << 12); -#endif -#ifdef CONFIG_KSU_SUSFS_SUS_SU - enabled_features |= (1 << 13); -#endif - error = copy_to_user((void __user*)arg3, (void*)&enabled_features, sizeof(enabled_features)); + error = susfs_get_enabled_features((char __user*)arg3, arg4); pr_info("susfs: CMD_SUSFS_SHOW_ENABLED_FEATURES -> ret: %d\n", error); if (copy_to_user((void __user*)arg5, &error, sizeof(error))) pr_info("susfs: copy_to_user() failed\n");