summaryrefslogtreecommitdiff
path: root/kernel/events
diff options
context:
space:
mode:
authorJohn Hubbard <jhubbard@nvidia.com>2026-05-27 15:55:06 -0700
committerAshutosh Dixit <ashutosh.dixit@intel.com>2026-05-28 08:19:36 -0700
commitd32bf877c0c3ebc345b444cbe009b3f44f9f8073 (patch)
tree9c1f70c64a19659ef1a2b32d5d87bc62c8ba3fe5 /kernel/events
parent637c8e3a525b73ac3cf765831119b02a927d11cd (diff)
downloadlinux-next-d32bf877c0c3ebc345b444cbe009b3f44f9f8073.tar.gz
linux-next-d32bf877c0c3ebc345b444cbe009b3f44f9f8073.zip
perf/core: out-of-line and export perf_allow_cpu/tracepoint()
These helpers are static inline in <linux/perf_event.h> and reach into sysctl_perf_event_paranoid and security_perf_event_open(), neither of which is itself exported. The perf_allow_* trio is therefore asymmetric: built-in callers can use any of the three, but modular code can only call perf_allow_kernel(). Move both bodies into kernel/events/core.c next to perf_allow_kernel() and export them with EXPORT_SYMBOL_GPL, following the shape of commit 5e9629d0ae97 ("drivers/perf: arm_spe: Use perf_allow_kernel() for permissions"). Existing in-tree callers live in built-in arch and tracing code, so the change is invisible to them. Provide !CONFIG_PERF_EVENTS stubs that fall back to perfmon_capable(), so the helpers stay callable when perf is compiled out. Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Link: https://patch.msgid.link/20260527225507.2044027-2-ashutosh.dixit@intel.com Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Diffstat (limited to 'kernel/events')
-rw-r--r--kernel/events/core.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 6d1f8bad7e1c..735e502beb96 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -14691,6 +14691,24 @@ int perf_allow_kernel(void)
}
EXPORT_SYMBOL_GPL(perf_allow_kernel);
+int perf_allow_cpu(void)
+{
+ if (sysctl_perf_event_paranoid > 0 && !perfmon_capable())
+ return -EACCES;
+
+ return security_perf_event_open(PERF_SECURITY_CPU);
+}
+EXPORT_SYMBOL_GPL(perf_allow_cpu);
+
+int perf_allow_tracepoint(void)
+{
+ if (sysctl_perf_event_paranoid > -1 && !perfmon_capable())
+ return -EPERM;
+
+ return security_perf_event_open(PERF_SECURITY_TRACEPOINT);
+}
+EXPORT_SYMBOL_GPL(perf_allow_tracepoint);
+
/*
* Inherit an event from parent task to child task.
*