Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions fs/susfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ static spinlock_t susfs_spin_lock;

extern bool susfs_is_current_ksu_domain(void);
#ifdef CONFIG_KSU_SUSFS_SUS_MOUNT
extern void ksu_try_umount(const char *mnt, bool check_mnt, int flags, uid_t uid);
extern void try_umount(const char *mnt, bool check_mnt, int flags, uid_t uid);
#endif
extern bool susfs_is_avc_log_spoofing_enabled;

Expand All @@ -34,6 +34,14 @@ bool susfs_is_log_enabled __read_mostly = true;
#define SUSFS_LOGE(fmt, ...)
#endif

bool susfs_starts_with(const char *str, const char *prefix) {
while (*prefix) {
if (*str++ != *prefix++)
return false;
}
return true;
}

/* sus_path */
#ifdef CONFIG_KSU_SUSFS_SUS_PATH
static LIST_HEAD(LH_SUS_PATH_LOOP);
Expand Down Expand Up @@ -858,9 +866,9 @@ void susfs_try_umount(uid_t target_uid) {
// We should umount in reversed order
list_for_each_entry_reverse(cursor, &LH_TRY_UMOUNT_PATH, list) {
if (cursor->info.mnt_mode == TRY_UMOUNT_DEFAULT) {
ksu_try_umount(cursor->info.target_pathname, false, 0, target_uid);
try_umount(cursor->info.target_pathname, false, 0, target_uid);
} else if (cursor->info.mnt_mode == TRY_UMOUNT_DETACH) {
ksu_try_umount(cursor->info.target_pathname, false, MNT_DETACH, target_uid);
try_umount(cursor->info.target_pathname, false, MNT_DETACH, target_uid);
} else {
SUSFS_LOGE("failed umounting '%s' for uid: %d, mnt_mode '%d' not supported\n",
cursor->info.target_pathname, target_uid, cursor->info.mnt_mode);
Expand Down
7 changes: 0 additions & 7 deletions include/linux/susfs_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,4 @@ static inline void susfs_set_current_proc_su_not_allowed(void) {
set_ti_thread_flag(&current->thread_info, TIF_PROC_SU_NOT_ALLOWED);
}

static inline bool susfs_starts_with(const char *str, const char *prefix) {
while (*prefix) {
if (*str++ != *prefix++)
return false;
}
return true;
}
#endif // #ifndef KSU_SUSFS_DEF_H
26 changes: 25 additions & 1 deletion kernel/kallsyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,11 @@ static void s_stop(struct seq_file *m, void *p)
{
}

#ifdef CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS
extern bool susfs_starts_with(const char *str, const char *prefix);
#endif


static int s_show(struct seq_file *m, void *p)
{
struct kallsym_iter *iter = m->private;
Expand All @@ -685,7 +690,26 @@ static int s_show(struct seq_file *m, void *p)
iter->type, iter->name);
#else
{
if (strstr(iter->name, "ksu_") || !strncmp(iter->name, "susfs_", 6) || !strncmp(iter->name, "ksud", 4)) {
if (susfs_starts_with(iter->name, "ksu_") ||
susfs_starts_with(iter->name, "__ksu_") ||
susfs_starts_with(iter->name, "susfs_") ||
susfs_starts_with(iter->name, "ksud") ||
susfs_starts_with(iter->name, "is_ksu_") ||
susfs_starts_with(iter->name, "is_manager_") ||
susfs_starts_with(iter->name, "escape_to_") ||
susfs_starts_with(iter->name, "setup_selinux") ||
susfs_starts_with(iter->name, "track_throne") ||
susfs_starts_with(iter->name, "on_post_fs_data") ||
susfs_starts_with(iter->name, "try_umount") ||
susfs_starts_with(iter->name, "kernelsu") ||
susfs_starts_with(iter->name, "__initcall__kmod_kernelsu") ||
susfs_starts_with(iter->name, "apply_kernelsu") ||
susfs_starts_with(iter->name, "handle_sepolicy") ||
susfs_starts_with(iter->name, "getenforce") ||
susfs_starts_with(iter->name, "setenforce") ||
susfs_starts_with(iter->name, "is_zygote"))
{

return 0;
}
seq_printf(m, "%pK %c %s\n", (void *)iter->value,
Expand Down