mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	This change makes function kallsyms_show_value() as generic function without dependency on CONFIG_KALLSYMS. Now module address will be displayed with lsmod and /proc/modules. Earlier: ======= / # insmod test.ko / # lsmod test 12288 0 - Live 0x0000000000000000 (O) // No Module Load address / # With change: ========== / # insmod test.ko / # lsmod test 12288 0 - Live 0xffff800000fc0000 (O) // Module address / # cat /proc/modules test 12288 0 - Live 0xffff800000fc0000 (O) 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>
		
			
				
	
	
		
			43 lines
		
	
	
	
		
			1,015 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1,015 B
		
	
	
	
		
			C
		
	
	
	
	
	
// 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>
 | 
						|
 | 
						|
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;
 | 
						|
	}
 | 
						|
}
 |