]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
perf cs-etm: Require full global header in auxtrace_info size check
authorArnaldo Carvalho de Melo <acme@redhat.com>
Sat, 13 Jun 2026 17:40:36 +0000 (14:40 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 17 Jun 2026 12:21:03 +0000 (09:21 -0300)
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: 55c1de9973d66516 ("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>
tools/perf/util/cs-etm-base.c

index 4abe416e3febd2cc0ae88da588e05d3175865709..aebef71d3a0a1d7bc512153c806b6fd78b945d84 100644 (file)
@@ -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 */