Make bpf_address_lookup() compatible with module_address_lookup() and clear the pointer to @modbuildid together with @modname. It is not strictly needed because __sprint_symbol() reads @modbuildid only when @modname is set. But better be on the safe side and make the API more safe. Fixes: 9294523e3768 ("module: add printk formats to add module build ID to stacktraces") Signed-off-by: Petr Mladek --- include/linux/filter.h | 15 +++++++++++---- kernel/kallsyms.c | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/include/linux/filter.h b/include/linux/filter.h index f5c859b8131a..b7b95840250a 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -1362,12 +1362,18 @@ struct bpf_prog *bpf_prog_ksym_find(unsigned long addr); static inline int bpf_address_lookup(unsigned long addr, unsigned long *size, - unsigned long *off, char **modname, char *sym) + unsigned long *off, char **modname, + const unsigned char **modbuildid, char *sym) { int ret = __bpf_address_lookup(addr, size, off, sym); - if (ret && modname) - *modname = NULL; + if (ret) { + if (modname) + *modname = NULL; + if (modbuildid) + *modbuildid = NULL; + } + return ret; } @@ -1433,7 +1439,8 @@ static inline struct bpf_prog *bpf_prog_ksym_find(unsigned long addr) static inline int bpf_address_lookup(unsigned long addr, unsigned long *size, - unsigned long *off, char **modname, char *sym) + unsigned long *off, char **modname, + const unsigned char **modbuildid, char *sym) { return 0; } diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index 9455e3bb07fc..efb12b077220 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c @@ -374,8 +374,8 @@ static int kallsyms_lookup_buildid(unsigned long addr, ret = module_address_lookup(addr, symbolsize, offset, modname, modbuildid, namebuf); if (!ret) - ret = bpf_address_lookup(addr, symbolsize, - offset, modname, namebuf); + ret = bpf_address_lookup(addr, symbolsize, offset, + modname, modbuildid, namebuf); if (!ret) ret = ftrace_mod_address_lookup(addr, symbolsize, -- 2.51.1