mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 01:08:13 -04:00
perf cs-etm: Require full global header in auxtrace_info size check
cs_etm__process_auxtrace_info() checks that header.size covers
event_header_size + INFO_HEADER_SIZE (16 bytes total), but then
accesses ptr[CS_PMU_TYPE_CPUS] at offset 24 from the start of the
event. A crafted 16-byte auxtrace_info event passes the size check
but reads out-of-bounds.
Include CS_ETM_HEADER_SIZE in the minimum size check so that the
global header entries (version, pmu_type_cpus, snapshot) are
guaranteed to fit within the event.
Fixes: 55c1de9973 ("perf cs-etm: Print auxtrace info even if OpenCSD isn't linked")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: James Clark <james.clark@arm.com>
Cc: Leo Yan <leo.yan@linaro.org>
Assisted-by: Claude:claude-opus-4.6
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
@@ -170,7 +170,9 @@ int cs_etm__process_auxtrace_info(union perf_event *event,
|
||||
u64 *ptr = NULL;
|
||||
u64 hdr_version;
|
||||
|
||||
if (auxtrace_info->header.size < (event_header_size + INFO_HEADER_SIZE))
|
||||
/* Ensure priv[] is large enough for the global header entries */
|
||||
if (auxtrace_info->header.size < (event_header_size + INFO_HEADER_SIZE +
|
||||
CS_ETM_HEADER_SIZE))
|
||||
return -EINVAL;
|
||||
|
||||
/* First the global part */
|
||||
|
||||
Reference in New Issue
Block a user