[PATCH 11/11] libperf: Document code simplification case for widening struct perf_cpu
From: Arnaldo Carvalho de Melo
Date: Mon Jun 08 2026 - 16:26:31 EST
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
Add a bullet point to the libperf ABI TODO explaining the code
simplification benefit of widening struct perf_cpu.cpu from int16_t
to int: the narrow type forces defensive truncation checks at every
boundary where wider CPU indices are narrowed, and values > 32767
silently wrap past bounds validation without them.
Cc: Ian Rogers <irogers@xxxxxxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
Assisted-by: Claude Opus 4.6 <noreply@xxxxxxxxxxxxx>
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
tools/lib/perf/TODO | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/tools/lib/perf/TODO b/tools/lib/perf/TODO
index 486dd95dc57208a8..1a3644aa1f38dde4 100644
--- a/tools/lib/perf/TODO
+++ b/tools/lib/perf/TODO
@@ -11,6 +11,13 @@ together.
(x86_64 max is 8192, arm64 is 4096), but NR_CPUS limits keep
growing. perf clamps to INT16_MAX in set_max_cpu_num() as a
safety net.
+ - Code simplification: the int16_t forces defensive truncation
+ checks at every boundary where a wider CPU index (int from
+ sample->cpu, al->cpu, etc.) is narrowed into struct perf_cpu.
+ Without these checks, values > 32767 silently wrap to small
+ positive numbers, bypassing bounds validation. Widening to int
+ eliminates this entire class of silent truncation bugs and
+ removes the need for the INT16_MAX clamp in set_max_cpu_num().
- Scope: struct perf_cpu is embedded everywhere — perf_cpu_map__cpu(),
perf_cpu_map__min(), perf_cpu_map__max(), perf_cpu_map__has(), the
for_each_cpu macros, and all internal callers. The perf_cpu_map
--
2.54.0