mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 01:08:13 -04:00
perf tools: Guard remaining test_bit calls from OOB sample CPU
auxtrace.c:filter_cpu() and builtin-script.c:filter_cpu() call test_bit(cpu, cpu_bitmap) where cpu_bitmap is declared with MAX_NR_CPUS bits. When the CPU value from a perf.data event is corrupt or absent (e.g. negative or >= MAX_NR_CPUS), test_bit reads out of bounds. Add bounds checks before test_bit(): >= 0 for the int16_t cpu.cpu in auxtrace (which also covers the -1 sentinel), and < MAX_NR_CPUS for both sites. Matches the pattern applied in the previous series for builtin-annotate.c, builtin-diff.c, builtin-report.c, and builtin-sched.c. Fixes:644e0840ad("perf auxtrace: Add CPU filter support") Fixes:5d67be97f8("perf report/annotate/script: Add option to specify a CPU range") Reported-by: sashiko-bot <sashiko-bot@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Anton Blanchard <anton@samba.org> Cc: Jiri Olsa <jolsa@kernel.org> Assisted-by: Claude:claude-opus-4.6 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@@ -2646,7 +2646,7 @@ static int cleanup_scripting(void)
|
||||
|
||||
static bool filter_cpu(struct perf_sample *sample)
|
||||
{
|
||||
if (cpu_list && sample->cpu != (u32)-1)
|
||||
if (cpu_list && sample->cpu != (u32)-1 && sample->cpu < MAX_NR_CPUS)
|
||||
return !test_bit(sample->cpu, cpu_bitmap);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -372,7 +372,8 @@ static bool filter_cpu(struct perf_session *session, struct perf_cpu cpu)
|
||||
{
|
||||
unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap;
|
||||
|
||||
return cpu_bitmap && cpu.cpu != -1 && !test_bit(cpu.cpu, cpu_bitmap);
|
||||
return cpu_bitmap && cpu.cpu >= 0 && cpu.cpu < MAX_NR_CPUS &&
|
||||
!test_bit(cpu.cpu, cpu_bitmap);
|
||||
}
|
||||
|
||||
static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,
|
||||
|
||||
Reference in New Issue
Block a user