[Patch v2 1/2] perf aslr: Add missing SIMD handling in aslr_tool__process_sample()

Subsystems: performance events subsystem, the rest

COLD20d REVIEWED: 1 (1M)

1 review trailer (1 from subsystem maintainers).

4 messages, 2 authors, 20d ago · open the first message on its own page

[Patch v2 1/2] perf aslr: Add missing SIMD handling in aslr_tool__process_sample()

From: Dapeng Mi <hidden>
Date: 2026-09-22 01:12:30

Currently the SIMD register sampling is supported, but the corresponding
handling is missed in aslr_tool__process_sample(). This can break parsing
of the sample record.

Add the missing SIMD register handling in aslr_tool__process_sample().

Signed-off-by: Dapeng Mi <redacted>
Reviewed-by: Ian Rogers <irogers@google.com>
---

V2: Add missed "#undef CHECK_SIMD" and fix typo in short log (Ian).


 tools/perf/util/aslr.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)
diff --git a/tools/perf/util/aslr.c b/tools/perf/util/aslr.c
index 027695d96779..697ac0d3d548 100644
--- a/tools/perf/util/aslr.c
+++ b/tools/perf/util/aslr.c
@@ -19,6 +19,7 @@
 #include <internal/lib.h>  /* page_size */
 #include <linux/compiler.h>
 #include <linux/zalloc.h>
+#include <linux/overflow.h>
 #include <errno.h>
 #include <inttypes.h>
 #include <unistd.h>
@@ -992,6 +993,34 @@ static int aslr_tool__process_sample(const struct perf_tool *tool,
 				COPY_U64();
 		}
 	}
+
+#define CHECK_SIMD() \
+	do { \
+		if (abi & PERF_SAMPLE_REGS_ABI_SIMD) { \
+			u64 nr_vector, vec_qwords; \
+			u64 nr_pred, pred_qwords; \
+			u64 header_len, vec_len, pred_len, simd_len; \
+			if (CHECK_BOUNDS(nr + 4, nr + 4)) { \
+				ret = -EFAULT; \
+				goto out_put; \
+			} \
+			header_len = 4;	\
+			nr_vector = in_array[i + nr]; \
+			vec_qwords = in_array[i + nr + 1]; \
+			nr_pred = in_array[i + nr + 2]; \
+			pred_qwords = in_array[i + nr + 3]; \
+			if (check_mul_overflow(nr_vector, vec_qwords, &vec_len) || \
+			    check_mul_overflow(nr_pred, pred_qwords, &pred_len) || \
+			    check_add_overflow(vec_len, pred_len, &simd_len) || \
+			    check_add_overflow(header_len, simd_len, &simd_len) || \
+			    check_add_overflow(nr, simd_len, &nr) || \
+			    nr > max_i - i) { \
+				ret = -EFAULT; \
+				goto out_put; \
+			} \
+		} \
+	} while (0)
+
 	if (orig_sample_type & PERF_SAMPLE_REGS_USER) {
 		u64 abi;
 
@@ -1007,6 +1036,7 @@ static int aslr_tool__process_sample(const struct perf_tool *tool,
 				ret = -EFAULT;
 				goto out_put;
 			}
+			CHECK_SIMD();
 			i += nr;
 		}
 	}
@@ -1061,6 +1091,7 @@ static int aslr_tool__process_sample(const struct perf_tool *tool,
 				ret = -EFAULT;
 				goto out_put;
 			}
+			CHECK_SIMD();
 			i += nr;
 		}
 	}
@@ -1154,6 +1185,7 @@ static int aslr_tool__process_sample(const struct perf_tool *tool,
 #undef CHECK_BOUNDS
 #undef COPY_U64
 #undef REMAP_U64
+#undef CHECK_SIMD
 
 static int skipn(int fd, off_t n)
 {
base-commit: 1c12f13c079c35a1e5ef2dd9e6aeea1810c58e87
-- 
2.34.1

[Patch v2 2/2] perf util: Explicitly include required headers

From: Dapeng Mi <hidden>
Date: 2026-09-22 01:12:32

Sashiko complains "the perf tool can be compiled with musl libc, which
enforces strict POSIX namespace separation and does not implicitly
include headers. Relying on implicit header inclusion can cause build
failures under musl."

Include the required headers explicitly to avoid such failures.

Signed-off-by: Dapeng Mi <redacted>
Reviewed-by: Ian Rogers <irogers@google.com>
---
 tools/perf/util/parse-regs-options.c           | 1 +
 tools/perf/util/perf-regs-arch/perf_regs_x86.c | 2 ++
 tools/perf/util/session.c                      | 5 +++++
 3 files changed, 8 insertions(+)
diff --git a/tools/perf/util/parse-regs-options.c b/tools/perf/util/parse-regs-options.c
index 709fcfb077a2..e70393388fae 100644
--- a/tools/perf/util/parse-regs-options.c
+++ b/tools/perf/util/parse-regs-options.c
@@ -3,6 +3,7 @@
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
+#include <strings.h>
 #include <stdio.h>
 #include "util/debug.h"
 #include <dwarf-regs.h>
diff --git a/tools/perf/util/perf-regs-arch/perf_regs_x86.c b/tools/perf/util/perf-regs-arch/perf_regs_x86.c
index fb6cf34f42f2..ea1d402b0893 100644
--- a/tools/perf/util/perf-regs-arch/perf_regs_x86.c
+++ b/tools/perf/util/perf-regs-arch/perf_regs_x86.c
@@ -3,6 +3,8 @@
 #include <errno.h>
 #include <string.h>
 #include <regex.h>
+#include <unistd.h>
+#include <stdbool.h>
 #include <linux/kernel.h>
 #include <linux/zalloc.h>
 
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index a5b596cd14be..04fba6fb02e8 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1,4 +1,9 @@
 // SPDX-License-Identifier: GPL-2.0
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <assert.h>
 #include <errno.h>
 #include <signal.h>
 #include <inttypes.h>
-- 
2.34.1

Re: [Patch v2 2/2] perf util: Explicitly include required headers

From: sashiko-bot@kernel.org
Date: 2026-09-22 01:16:31

Sashiko complains "the perf tool can be compiled with musl libc, which
enforces strict POSIX namespace separation and does not implicitly
include headers. Relying on implicit header inclusion can cause build
failures under musl."

Include the required headers explicitly to avoid such failures.

Signed-off-by: Dapeng Mi <redacted>
Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260922010531.1933320-1-dapeng1.mi@linux.intel.com?part=2

Re: [Patch v2 1/2] perf aslr: Add missing SIMD handling in aslr_tool__process_sample()

From: sashiko-bot@kernel.org
Date: 2026-09-22 01:20:12

Currently the SIMD register sampling is supported, but the corresponding
handling is missed in aslr_tool__process_sample(). This can break parsing
of the sample record.

Add the missing SIMD register handling in aslr_tool__process_sample().

Signed-off-by: Dapeng Mi <redacted>
Sashiko has reviewed this patch and found no issues. It looks great!

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260922010531.1933320-1-dapeng1.mi@linux.intel.com?part=1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help