[PATCH v5 2/4] perf/core: Clear the whole branch entry in perf_clear_branch_entry()
Usama Arif
usama.arif at linux.dev
Tue Jul 7 07:24:22 PDT 2026
On Tue, 16 Jun 2026 08:57:07 -0700 Puranjay Mohan <puranjay at kernel.org> wrote:
> perf_clear_branch_entry_bitfields() resets the bitfields of struct
> perf_branch_entry one at a time and deliberately leaves from/to alone,
> since callers overwrite those immediately. The list of assignments has to
> be kept in sync with the struct by hand, and it has already drifted:
> new_type and priv were added to perf_branch_entry but never cleared here,
> so stale values can leak into the records handed to userspace.
>
> Clear the entry with a single struct assignment instead:
>
> *br = (struct perf_branch_entry){ };
>
> Every caller writes from/to right after the clear, so zeroing them as well
> is harmless and the dead stores are elided on the x86 LBR read paths.
> There is no longer anything to keep in sync when a field is added.
>
> The helper no longer touches only the bitfields, so rename it to
> perf_clear_branch_entry() and update the callers, fixing up the
> br+nr/br+out spacing on the touched lines while at it.
>
> Fixes: b190bc4ac9e6 ("perf: Extend branch type classification")
> Fixes: 5402d25aa571 ("perf: Capture branch privilege information")
> Suggested-by: James Clark <james.clark at linaro.org>
> Signed-off-by: Puranjay Mohan <puranjay at kernel.org>
> ---
> arch/x86/events/amd/brs.c | 2 +-
> arch/x86/events/amd/lbr.c | 2 +-
> arch/x86/events/intel/lbr.c | 6 +++---
> drivers/perf/arm_brbe.c | 2 +-
> include/linux/perf_event.h | 16 ++--------------
> 5 files changed, 8 insertions(+), 20 deletions(-)
>
Acked-by: Usama Arif <usama.arif at linux.dev>
More information about the linux-arm-kernel
mailing list