Commit ddc0ec3be8077a689e0136c873519bf851a741e6

Authored by Arnaldo Carvalho de Melo
Committed by Greg Kroah-Hartman
1 parent d8086c3bd3

perf symbols: Robustify reading of build-id from sysfs

[ Upstream commit 7934c98a6e04028eb34c1293bfb5a6b0ab630b66 ]

Markus reported that perf segfaults when reading /sys/kernel/notes from
a kernel linked with GNU gold, due to what looks like a gold bug, so do
some bounds checking to avoid crashing in that case.

Reported-by: Markus Trippelsdorf <markus@trippelsdorf.de>
Report-Link: http://lkml.kernel.org/r/20161219161821.GA294@x4
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-ryhgs6a6jxvz207j2636w31c@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 1 changed file with 6 additions and 0 deletions Side-by-side Diff

tools/perf/util/symbol-elf.c
... ... @@ -537,6 +537,12 @@
537 537 break;
538 538 } else {
539 539 int n = namesz + descsz;
  540 +
  541 + if (n > (int)sizeof(bf)) {
  542 + n = sizeof(bf);
  543 + pr_debug("%s: truncating reading of build id in sysfs file %s: n_namesz=%u, n_descsz=%u.\n",
  544 + __func__, filename, nhdr.n_namesz, nhdr.n_descsz);
  545 + }
540 546 if (read(fd, bf, n) != n)
541 547 break;
542 548 }