From 4626d370ae89b8af4d46a45372b269f926ec662d Mon Sep 17 00:00:00 2001 From: lvyating Date: Tue, 27 Oct 2026 19:47:32 +0800 Subject: [PATCH] perf machine: Fix NULL deref in thread__resolve_callchain_sample() When recording with -j stack, resolve_lbr_callchain_sample() can dereference a NULL 'chain' pointer while resolving the branch stack. $ perf record -j stack -e branches:u uname perf: Segmentation fault Fix it by checking 'chain' for NULL before dereferencing it. Fixes: 29be60c93d2d9300 ("perf build-id: Mark DSO in sample callchains") Reviewed-by: Ian Rogers Reviewed-by: Shengming Hu Signed-off-by: lvyating Tested-by: Ian Rogers Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Dai Hualiang Cc: he.yilin@zte.com.cn Cc: Ian Rogers Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Mark Rutland Cc: Namhyung Kim Cc: Peter Zijlstra Cc: Qingtao Liu Cc: Shen Lin Cc: stable@vger.kernel.org Cc: ye.zhihao1@zte.com.cn Cc: zhang.cheng35@zte.com.cn Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/machine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 1d9d3bf57720..076d167380f2 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2860,7 +2860,7 @@ static int thread__resolve_callchain_sample(struct thread *thread, if (chain) chain_nr = chain->nr; - if (evsel__has_branch_callstack(evsel)) { + if (chain && evsel__has_branch_callstack(evsel)) { struct perf_env *env = evsel__env(evsel); err = resolve_lbr_callchain_sample(thread, cursor, sample, parent,