kernel/kallsyms.c: fix %pB when there's no symbol at the address
__sprint_symbol() should restore original address when kallsyms_lookup() failed to find a symbol. It's reported when dumpstack shows an address in a dynamically allocated trampoline for ftrace. [ 1314.612287] [<ffffffff81700312>] dump_stack+0x45/0x56 [ 1314.612290] [<ffffffff8125f5b0>] ? meminfo_proc_open+0x30/0x30 [ 1314.612293] [<ffffffffa080a494>] kpatch_ftrace_handler+0x14/0xf0 [kpatch] [ 1314.612306] [<ffffffffa00160c4>] 0xffffffffa00160c3 You can see a difference in the hex address - c4 and c3. Fix it. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Reported-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ca35664031
commit
b86280aa48
|
@ -364,7 +364,7 @@ static int __sprint_symbol(char *buffer, unsigned long address,
|
||||||
address += symbol_offset;
|
address += symbol_offset;
|
||||||
name = kallsyms_lookup(address, &size, &offset, &modname, buffer);
|
name = kallsyms_lookup(address, &size, &offset, &modname, buffer);
|
||||||
if (!name)
|
if (!name)
|
||||||
return sprintf(buffer, "0x%lx", address);
|
return sprintf(buffer, "0x%lx", address - symbol_offset);
|
||||||
|
|
||||||
if (name != buffer)
|
if (name != buffer)
|
||||||
strcpy(buffer, name);
|
strcpy(buffer, name);
|
||||||
|
|
Loading…
Reference in New Issue