perf dso: Use lock annotations to fix asan deadlock
authorIan Rogers <irogers@google.com>
Tue, 18 Mar 2025 04:31:50 +0000 (21:31 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Tue, 18 Mar 2025 05:07:18 +0000 (22:07 -0700)
commit5ac22c35aa8519f1fb5522fb3aff915f28a9365e
tree4bc2bad67d628a3a89b343d89efba34d40b83e13
parentc5ebf3a26601c833a3ea8c6035d4318445a7e3a5
perf dso: Use lock annotations to fix asan deadlock

dso__list_del with address sanitizer and/or reference count checking
will call dso__put that can call dso__data_close reentrantly trying to
lock the dso__data_open_lock and deadlocking. Switch from pthread
mutexes to perf's mutex so that lock checking is performed in debug
builds. Add lock annotations that diagnosed the problem. Release the
dso__data_open_lock around the dso__put to avoid the deadlock.

Change the declaration of dso__data_get_fd to return a boolean,
indicating the fd is valid and the lock is held, to make it compatible
with the thread safety annotations as a try lock.

Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250318043151.137973-3-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/tests/dso-data.c
tools/perf/util/dso.c
tools/perf/util/dso.h
tools/perf/util/unwind-libunwind-local.c