[PATCH v6 03/44] perf: Move security_perf_event_free() call to __free_event()

Sean Christopherson
2025-12-06T00:17:33Z

Move the freeing of any security state associated with a perf event from
_free_event() to __free_event(), i.e. invoke security_perf_event_free() in
the error paths for perf_event_alloc(). This will allow adding potential
error paths in perf_event_alloc() that can occur after allocating security
state.

Note, kfree() and thus security_perf_event_free() is a nop if
event->security is NULL, i.e. calling security_perf_event_free() even if
security_perf_event_alloc() fails or is never reached is functionality ok.

Tested-by: Xudong Hao <xudong.hao@intel.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
kernel/events/core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 1e37ab90b815..e34112df8b31 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5602,6 +5602,8 @@ static void __free_event(struct perf_event *event)
{
struct pmu *pmu = event->pmu;

+ security_perf_event_free(event);
+
if (event->attach_state & PERF_ATTACH_CALLCHAIN)
put_callchain_buffers();

@@ -5665,8 +5667,6 @@ static void _free_event(struct perf_event *event)

unaccount_event(event);

- security_perf_event_free(event);
-
if (event->rb) {
/*
* Can happen when we close an event with re-directed output.
--
2.52.0.223.gf5cc29aaa4-goog