In the Linux kernel I want to probe the kernel function effective_prio()
. It defined as static
.
When I go to search the symbol of it in the
kallsyms only lists the symbols exported by EXPORT_SYMBOL and EXPORT_SYMBOL_GPL macros.
This is done for security. We don'T usually want modules to be able to access for example internal or security functions. Those just go against the idea of making kernel modules as safe as possible, but allowing them to do as much as it is possible.
There are two possibilities for a function not appearing in /proc/kallsyms
:
static
, and the compiler decides to inline the function (with or without the inline
keyword)If a config option or another #define
removes a function from being compiled, e.g.:
#ifdef CONFIG_OPT
void foo(void) {
}
#endif
As far as I know, if a function does not appear in /proc/kallsyms
, it is not possible to call or probe it from a module.
However, /proc/kallsyms
contains all functions of the kernel, not just the ones exported via EXPORT_SYMBOL
/EXPORT_SYMBOL_GPL
.
CONFIG_KALLSYMS_ALL=y
is also required to see non-static variables, e.g.:
grep sysctl_sched_nr_migrate /proc/kallsyms
which is defined as:
const_debug unsigned int sysctl_sched_nr_migrate = 32;