* [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned
@ 2024-12-12 8:05 Ian Rogers
2024-12-12 8:05 ` [PATCH v1 2/3] perf machine: Avoid UB by delaying computing branch entries Ian Rogers
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Ian Rogers @ 2024-12-12 8:05 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Sun Haiyong, Yanteng Si,
linux-perf-users, linux-kernel
Features like hostname have arbitrary size and break the assumed
8-byte alignment of perf events. Pad all feature events until 8-byte
alignment is restored.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/util/synthetic-events.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c
index f8ac2ac2da45..5b14244253b5 100644
--- a/tools/perf/util/synthetic-events.c
+++ b/tools/perf/util/synthetic-events.c
@@ -2401,6 +2401,11 @@ int perf_event__synthesize_features(const struct perf_tool *tool, struct perf_se
pr_debug("Error writing feature\n");
continue;
}
+ while (PERF_ALIGN(ff.offset, sizeof(u64)) != ff.offset) {
+ char c = 0;
+
+ do_write(&ff, &c, 1);
+ }
/* ff.buf may have changed due to realloc in do_write() */
fe = ff.buf;
memset(fe, 0, sizeof(*fe));
--
2.47.1.613.gc27f4b7a9f-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v1 2/3] perf machine: Avoid UB by delaying computing branch entries
2024-12-12 8:05 [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned Ian Rogers
@ 2024-12-12 8:05 ` Ian Rogers
2024-12-12 8:05 ` [PATCH v1 3/3] perf record: Assert synthesized events are 8-byte aligned Ian Rogers
2024-12-14 19:32 ` [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned Ian Rogers
2 siblings, 0 replies; 4+ messages in thread
From: Ian Rogers @ 2024-12-12 8:05 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Sun Haiyong, Yanteng Si,
linux-perf-users, linux-kernel
If the branch_stack is NULL then perf_sample__branch_entries may
return NULL+1 which triggers ubsan (undefined behavior
sanitizer). Avoid this by making the computation conditional on branch
existing.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/util/machine.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 84661d950104..7b1e1c254c17 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -2670,7 +2670,6 @@ static int thread__resolve_callchain_sample(struct thread *thread,
bool symbols)
{
struct branch_stack *branch = sample->branch_stack;
- struct branch_entry *entries = perf_sample__branch_entries(sample);
struct ip_callchain *chain = sample->callchain;
int chain_nr = 0;
u8 cpumode = PERF_RECORD_MISC_USER;
@@ -2712,6 +2711,7 @@ static int thread__resolve_callchain_sample(struct thread *thread,
*/
if (branch && callchain_param.branch_callstack) {
+ struct branch_entry *entries = perf_sample__branch_entries(sample);
int nr = min(max_stack, (int)branch->nr);
struct branch_entry be[nr];
struct iterations iter[nr];
--
2.47.1.613.gc27f4b7a9f-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v1 3/3] perf record: Assert synthesized events are 8-byte aligned
2024-12-12 8:05 [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned Ian Rogers
2024-12-12 8:05 ` [PATCH v1 2/3] perf machine: Avoid UB by delaying computing branch entries Ian Rogers
@ 2024-12-12 8:05 ` Ian Rogers
2024-12-14 19:32 ` [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned Ian Rogers
2 siblings, 0 replies; 4+ messages in thread
From: Ian Rogers @ 2024-12-12 8:05 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Sun Haiyong, Yanteng Si,
linux-perf-users, linux-kernel
Capture that events are 8-byte aligned and avoid later misaligned
event problems.
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/builtin-record.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index adbaf80b398c..a5689d0e93ad 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -624,7 +624,10 @@ static int process_synthesized_event(const struct perf_tool *tool,
struct machine *machine __maybe_unused)
{
struct record *rec = container_of(tool, struct record, tool);
- return record__write(rec, NULL, event, event->header.size);
+ size_t size = event->header.size;
+
+ assert(PERF_ALIGN(size, sizeof(u64)) == size);
+ return record__write(rec, NULL, event, size);
}
static struct mutex synth_lock;
--
2.47.1.613.gc27f4b7a9f-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned
2024-12-12 8:05 [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned Ian Rogers
2024-12-12 8:05 ` [PATCH v1 2/3] perf machine: Avoid UB by delaying computing branch entries Ian Rogers
2024-12-12 8:05 ` [PATCH v1 3/3] perf record: Assert synthesized events are 8-byte aligned Ian Rogers
@ 2024-12-14 19:32 ` Ian Rogers
2 siblings, 0 replies; 4+ messages in thread
From: Ian Rogers @ 2024-12-14 19:32 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Sun Haiyong, Yanteng Si,
linux-perf-users, linux-kernel
On Thu, Dec 12, 2024 at 12:05 AM Ian Rogers <irogers@google.com> wrote:
>
> Features like hostname have arbitrary size and break the assumed
> 8-byte alignment of perf events. Pad all feature events until 8-byte
> alignment is restored.
>
> Signed-off-by: Ian Rogers <irogers@google.com>
This change breaks pipe mode tests for me on ARM. I've not investigated why yet.
Thanks,
Ian
> ---
> tools/perf/util/synthetic-events.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c
> index f8ac2ac2da45..5b14244253b5 100644
> --- a/tools/perf/util/synthetic-events.c
> +++ b/tools/perf/util/synthetic-events.c
> @@ -2401,6 +2401,11 @@ int perf_event__synthesize_features(const struct perf_tool *tool, struct perf_se
> pr_debug("Error writing feature\n");
> continue;
> }
> + while (PERF_ALIGN(ff.offset, sizeof(u64)) != ff.offset) {
> + char c = 0;
> +
> + do_write(&ff, &c, 1);
> + }
> /* ff.buf may have changed due to realloc in do_write() */
> fe = ff.buf;
> memset(fe, 0, sizeof(*fe));
> --
> 2.47.1.613.gc27f4b7a9f-goog
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-12-14 19:32 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-12 8:05 [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned Ian Rogers
2024-12-12 8:05 ` [PATCH v1 2/3] perf machine: Avoid UB by delaying computing branch entries Ian Rogers
2024-12-12 8:05 ` [PATCH v1 3/3] perf record: Assert synthesized events are 8-byte aligned Ian Rogers
2024-12-14 19:32 ` [PATCH v1 1/3] perf synthetic-events: Ensure features are aligned Ian Rogers
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.