From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7509F47DD65; Sat, 28 Feb 2026 17:33:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772300020; cv=none; b=sIEA+lJqiU4MpiIlg6mBElFmhtKDvb3jMKSl321QZK+ttvkODDZP6SgQWOa02/lJxGLiyYZZefUHzqd66+lB2+n6XqrRGBOnDQh6iXs4CeLnax78Z1sQiNg31j3dyxjay1QCxg9y2eXn2FsQPxk8d8DydwR6gimThVttPaAtuII= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772300020; c=relaxed/simple; bh=JR68V0AaPNuDBa1mHAvLSTn9vSVneWjfgN9rsMZwjUE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ph9CC20npcmW2feoXRYcWZbNiehHCcPEmtzb4HpB+QeIeODvl88yBMlXHLQX/uYQk1ffoPEY+zZo/h4F1fVTATHAcFYAVzG37RxXj1IqXfiuJrMpbrFuOWQIxVwixHrwSAsqO/6F9xOCfpTR/sn9RlxeKKBiMVZv3LwskG/LWGE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VWB8LFIQ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VWB8LFIQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4628FC116D0; Sat, 28 Feb 2026 17:33:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772300020; bh=JR68V0AaPNuDBa1mHAvLSTn9vSVneWjfgN9rsMZwjUE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VWB8LFIQwdgl+Y1baiFe9YsxvpFpfiNBlsqdP5y83Bd6xZy2onPh/mcTG0++jqrJa Nr3wV1jSUdXJIbZZy3/prGe3dybzNVMAKv72Cpec/f1+fSq6M3TAcWpTvo4aq+muRT K0xCejO7O4SPZj6M3HzEh9G/H/bzZXAOTHDwbb8rz8mpjMKHUUrNnLgd4mMxZtR7nc 2GijrKVHqnjH8TH2E1LKlRCne/pwwyd0jT0CFsCgLzeiajhQ3hM8gFr98OUz/J+hQj b908iv1zCfXq3OCVqMHt6Ozszv3DIhd+u+fq6DV7/MEm33sQRnViL9Lz5leRtqCh8j yEJ2JiEfHZXbg== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Ian Rogers , Andres Freund , Adrian Hunter , Alexander Shishkin , Andi Kleen , Dapeng Mi , "Dr. David Alan Gilbert" , Ingo Molnar , James Clark , Jiri Olsa , Namhyung Kim , Peter Zijlstra , Thomas Falcon , Thomas Richter , Yang Li , Arnaldo Carvalho de Melo , Sasha Levin Subject: [PATCH 6.19 031/844] perf stat-shadow: In prepare_metric fix guard on reading NULL perf_stat_evsel Date: Sat, 28 Feb 2026 12:19:04 -0500 Message-ID: <20260228173244.1509663-32-sashal@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260228173244.1509663-1-sashal@kernel.org> References: <20260228173244.1509663-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit From: Ian Rogers [ Upstream commit 63b320aaac08ba267268ec21a195ce3c82dcb8ab ] The aggr value is setup to always be non-null creating a redundant guard for reading from it. Switch to using the perf_stat_evsel (ps) and narrow the scope of aggr so that it is known valid when used. Fixes: 3d65f6445fd93e3e ("perf stat-shadow: Read tool events directly") Reported-by: Andres Freund Signed-off-by: Ian Rogers Cc: Adrian Hunter Cc: Alexander Shishkin Cc: Andi Kleen Cc: Dapeng Mi Cc: Dr. David Alan Gilbert Cc: Ian Rogers Cc: Ingo Molnar Cc: James Clark Cc: Jiri Olsa Cc: Namhyung Kim Cc: Peter Zijlstra Cc: Thomas Falcon Cc: Thomas Richter Cc: Yang Li Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: Sasha Levin --- tools/perf/util/stat-shadow.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c index 5d8d09e0e6ae5..59d2cd4f2188d 100644 --- a/tools/perf/util/stat-shadow.c +++ b/tools/perf/util/stat-shadow.c @@ -57,7 +57,6 @@ static int prepare_metric(struct perf_stat_config *config, bool is_tool_time = tool_pmu__is_time_event(config, metric_events[i], &tool_aggr_idx); struct perf_stat_evsel *ps = metric_events[i]->stats; - struct perf_stat_aggr *aggr; char *n; double val; @@ -82,8 +81,7 @@ static int prepare_metric(struct perf_stat_config *config, } } /* Time events are always on CPU0, the first aggregation index. */ - aggr = &ps->aggr[is_tool_time ? tool_aggr_idx : aggr_idx]; - if (!aggr || !metric_events[i]->supported || aggr->counts.run == 0) { + if (!ps || !metric_events[i]->supported) { /* * Not supported events will have a count of 0, which * can be confusing in a metric. Explicitly set the @@ -93,11 +91,21 @@ static int prepare_metric(struct perf_stat_config *config, val = NAN; source_count = 0; } else { - val = aggr->counts.val; - if (is_tool_time) - val *= 1e-9; /* Convert time event nanoseconds to seconds. */ - if (!source_count) - source_count = evsel__source_count(metric_events[i]); + struct perf_stat_aggr *aggr = + &ps->aggr[is_tool_time ? tool_aggr_idx : aggr_idx]; + + if (aggr->counts.run == 0) { + val = NAN; + source_count = 0; + } else { + val = aggr->counts.val; + if (is_tool_time) { + /* Convert time event nanoseconds to seconds. */ + val *= 1e-9; + } + if (!source_count) + source_count = evsel__source_count(metric_events[i]); + } } n = strdup(evsel__metric_id(metric_events[i])); if (!n) -- 2.51.0