mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
kallsyms: move kallsyms_show_value() out of kallsyms.c
function kallsyms_show_value() is used by other parts like modules_open(), kprobes_read() etc. which can work in case of !KALLSYMS also. e.g. as of now lsmod do not show module address if KALLSYMS is disabled. since kallsyms_show_value() defination is not present, it returns false in !KALLSYMS. / # lsmod test 12288 0 - Live 0x0000000000000000 (O) So kallsyms_show_value() can be made generic without dependency on KALLSYMS. Thus moving out function to a new file ksyms_common.c. With this patch code is just moved to new file and no functional change. Co-developed-by: Onkarnath <onkarnath.1@samsung.com> Signed-off-by: Onkarnath <onkarnath.1@samsung.com> Signed-off-by: Maninder Singh <maninder1.s@samsung.com> Reviewed-by: Zhen Lei <thunder.leizhen@huawei.com> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
This commit is contained in:
committed by
Luis Chamberlain
parent
4f521bab5b
commit
b06e9318bf
@@ -10,7 +10,7 @@ obj-y = fork.o exec_domain.o panic.o \
|
|||||||
extable.o params.o \
|
extable.o params.o \
|
||||||
kthread.o sys_ni.o nsproxy.o \
|
kthread.o sys_ni.o nsproxy.o \
|
||||||
notifier.o ksysfs.o cred.o reboot.o \
|
notifier.o ksysfs.o cred.o reboot.o \
|
||||||
async.o range.o smpboot.o ucount.o regset.o
|
async.o range.o smpboot.o ucount.o regset.o ksyms_common.o
|
||||||
|
|
||||||
obj-$(CONFIG_USERMODE_DRIVER) += usermode_driver.o
|
obj-$(CONFIG_USERMODE_DRIVER) += usermode_driver.o
|
||||||
obj-$(CONFIG_MULTIUSER) += groups.o
|
obj-$(CONFIG_MULTIUSER) += groups.o
|
||||||
|
@@ -907,41 +907,6 @@ late_initcall(bpf_ksym_iter_register);
|
|||||||
|
|
||||||
#endif /* CONFIG_BPF_SYSCALL */
|
#endif /* CONFIG_BPF_SYSCALL */
|
||||||
|
|
||||||
static inline int kallsyms_for_perf(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_PERF_EVENTS
|
|
||||||
extern int sysctl_perf_event_paranoid;
|
|
||||||
if (sysctl_perf_event_paranoid <= 1)
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We show kallsyms information even to normal users if we've enabled
|
|
||||||
* kernel profiling and are explicitly not paranoid (so kptr_restrict
|
|
||||||
* is clear, and sysctl_perf_event_paranoid isn't set).
|
|
||||||
*
|
|
||||||
* Otherwise, require CAP_SYSLOG (assuming kptr_restrict isn't set to
|
|
||||||
* block even that).
|
|
||||||
*/
|
|
||||||
bool kallsyms_show_value(const struct cred *cred)
|
|
||||||
{
|
|
||||||
switch (kptr_restrict) {
|
|
||||||
case 0:
|
|
||||||
if (kallsyms_for_perf())
|
|
||||||
return true;
|
|
||||||
fallthrough;
|
|
||||||
case 1:
|
|
||||||
if (security_capable(cred, &init_user_ns, CAP_SYSLOG,
|
|
||||||
CAP_OPT_NOAUDIT) == 0)
|
|
||||||
return true;
|
|
||||||
fallthrough;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int kallsyms_open(struct inode *inode, struct file *file)
|
static int kallsyms_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
45
kernel/ksyms_common.c
Normal file
45
kernel/ksyms_common.c
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
/*
|
||||||
|
* ksyms_common.c: A split of kernel/kallsyms.c
|
||||||
|
* Contains a few generic function definations independent of config KALLSYMS.
|
||||||
|
*/
|
||||||
|
#include <linux/kallsyms.h>
|
||||||
|
#include <linux/security.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_KALLSYMS
|
||||||
|
static inline int kallsyms_for_perf(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_PERF_EVENTS
|
||||||
|
extern int sysctl_perf_event_paranoid;
|
||||||
|
|
||||||
|
if (sysctl_perf_event_paranoid <= 1)
|
||||||
|
return 1;
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We show kallsyms information even to normal users if we've enabled
|
||||||
|
* kernel profiling and are explicitly not paranoid (so kptr_restrict
|
||||||
|
* is clear, and sysctl_perf_event_paranoid isn't set).
|
||||||
|
*
|
||||||
|
* Otherwise, require CAP_SYSLOG (assuming kptr_restrict isn't set to
|
||||||
|
* block even that).
|
||||||
|
*/
|
||||||
|
bool kallsyms_show_value(const struct cred *cred)
|
||||||
|
{
|
||||||
|
switch (kptr_restrict) {
|
||||||
|
case 0:
|
||||||
|
if (kallsyms_for_perf())
|
||||||
|
return true;
|
||||||
|
fallthrough;
|
||||||
|
case 1:
|
||||||
|
if (security_capable(cred, &init_user_ns, CAP_SYSLOG,
|
||||||
|
CAP_OPT_NOAUDIT) == 0)
|
||||||
|
return true;
|
||||||
|
fallthrough;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
Reference in New Issue
Block a user