diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index 159d880..c9a8111 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c @@ -567,8 +567,12 @@ static int s_show(struct seq_file *m, void *p) struct kallsym_iter *iter = m->private; #ifdef CONFIG_GRKERNSEC_HIDESYM + int is_admin; + if (!uid_eq(current_uid(), GLOBAL_ROOT_UID)) return 0; + + is_admin = capable_nolog(CAP_SYS_ADMIN); #endif /* Some debugging symbols have no name. Ignore them. */ @@ -585,11 +589,24 @@ static int s_show(struct seq_file *m, void *p) type = iter->exported ? toupper(iter->type) : tolower(iter->type); +#ifdef CONFIG_GRKERNSEC_HIDESYM + if (is_admin) + seq_printf(m, "%pP %c %s\t[%s]\n", (void *)iter->value, + type, iter->name, iter->module_name); + else +#endif seq_printf(m, "%pK %c %s\t[%s]\n", (void *)iter->value, type, iter->name, iter->module_name); - } else + } else { +#ifdef CONFIG_GRKERNSEC_HIDESYM + if (is_admin) + seq_printf(m, "%pP %c %s\n", (void *)iter->value, + iter->type, iter->name); + else +#endif seq_printf(m, "%pK %c %s\n", (void *)iter->value, iter->type, iter->name); + } return 0; }