mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
perf record: Fix a asan runtime error in util/maps.c
If I build perf with asan and run Zstd test: $ make -C tools/perf O=/tmp/perf DEBUG=1 EXTRA_CFLAGS="-O0 -g -fno-omit-frame-pointer -fsanitize=undefined" $ /tmp/perf/perf test "Zstd perf.data compression/decompression" -vv 83: Zstd perf.data compression/decompression: ... util/maps.c:1046:5: runtime error: null pointer passed as argument 2, which is declared to never be null ... The issue was caused by `bsearch`. The patch adds a check to ensure argument 2 and 3 are not NULL and 0. Testing with the commands above confirms that the runtime error is resolved. Reviewed-by: Ian Rogers <irogers@google.com> Signed-off-by: Chun-Tse Shao <ctshao@google.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ben Gainey <ben.gainey@arm.com> Cc: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@arm.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nick Terrell <terrelln@fb.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: https://lore.kernel.org/r/20250303183646.327510-2-ctshao@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
208c0e1683
commit
8cdf00b843
|
|
@ -1082,10 +1082,13 @@ struct map *maps__find(struct maps *maps, u64 ip)
|
|||
while (!done) {
|
||||
down_read(maps__lock(maps));
|
||||
if (maps__maps_by_address_sorted(maps)) {
|
||||
struct map **mapp =
|
||||
bsearch(&ip, maps__maps_by_address(maps), maps__nr_maps(maps),
|
||||
sizeof(*mapp), map__addr_cmp);
|
||||
struct map **mapp = NULL;
|
||||
struct map **maps_by_address = maps__maps_by_address(maps);
|
||||
unsigned int nr_maps = maps__nr_maps(maps);
|
||||
|
||||
if (maps_by_address && nr_maps)
|
||||
mapp = bsearch(&ip, maps_by_address, nr_maps, sizeof(*mapp),
|
||||
map__addr_cmp);
|
||||
if (mapp)
|
||||
result = map__get(*mapp);
|
||||
done = true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user