提交 b86280aa 编写于 作者: N Namhyung Kim 提交者: Linus Torvalds

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: NNamhyung Kim <namhyung@kernel.org>
Reported-by: NMasami 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: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 ca356640
...@@ -364,7 +364,7 @@ static int __sprint_symbol(char *buffer, unsigned long address, ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册