android_kernel_sony_sdm845/kernel/trace
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Joel Fernandes (Google) 4bd147e3af BACKPORT: perf_event: Add support for LSM and SELinux checks
In current mainline, the degree of access to perf_event_open(2) system
call depends on the perf_event_paranoid sysctl.  This has a number of
limitations:

1. The sysctl is only a single value. Many types of accesses are controlled
   based on the single value thus making the control very limited and
   coarse grained.
2. The sysctl is global, so if the sysctl is changed, then that means
   all processes get access to perf_event_open(2) opening the door to
   security issues.

This patch adds LSM and SELinux access checking which will be used in
Android to access perf_event_open(2) for the purposes of attaching BPF
programs to tracepoints, perf profiling and other operations from
userspace. These operations are intended for production systems.

5 new LSM hooks are added:
1. perf_event_open: This controls access during the perf_event_open(2)
   syscall itself. The hook is called from all the places that the
   perf_event_paranoid sysctl is checked to keep it consistent with the
   systctl. The hook gets passed a 'type' argument which controls CPU,
   kernel and tracepoint accesses (in this context, CPU, kernel and
   tracepoint have the same semantics as the perf_event_paranoid sysctl).
   Additionally, I added an 'open' type which is similar to
   perf_event_paranoid sysctl == 3 patch carried in Android and several other
   distros but was rejected in mainline [1] in 2016.

2. perf_event_alloc: This allocates a new security object for the event
   which stores the current SID within the event. It will be useful when
   the perf event's FD is passed through IPC to another process which may
   try to read the FD. Appropriate security checks will limit access.

3. perf_event_free: Called when the event is closed.

4. perf_event_read: Called from the read(2) and mmap(2) syscalls for the event.

5. perf_event_write: Called from the ioctl(2) syscalls for the event.

[1] https://lwn.net/Articles/696240/

Since Peter had suggest LSM hooks in 2016 [1], I am adding his
Suggested-by tag below.

To use this patch, we set the perf_event_paranoid sysctl to -1 and then
apply selinux checking as appropriate (default deny everything, and then
add policy rules to give access to domains that need it). In the future
we can remove the perf_event_paranoid sysctl altogether.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Co-developed-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: James Morris <jmorris@namei.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: rostedt@goodmis.org
Cc: Yonghong Song <yhs@fb.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: jeffv@google.com
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: primiano@google.com
Cc: Song Liu <songliubraving@fb.com>
Cc: rsavitski@google.com
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Matthew Garrett <matthewgarrett@google.com>
Link: https://lkml.kernel.org/r/20191014170308.70668-1-joel@joelfernandes.org

(cherry picked from commit da97e18458fb42d7c00fac5fd1c56a3896ec666e)
[ Ryan Savitski: adapted for older codebase, and folded in upstream
  ae79d5588a04 (perf/core: Fix !CONFIG_PERF_EVENTS build warnings and
  failures). ]
Bug: 137092007
Change-Id: I68ee3dba85c8d64e24f28a0fbc8db2aed3b6f77b
Signed-off-by: Ryan Savitski <rsavitski@google.com>
Signed-off-by: Rapherion Rollerscaperers <rapherion@raphielgang.org>
Signed-off-by: Chenyang Zhong <zhongcy95@gmail.com>
Signed-off-by: Sorayukii <sorayukii69@gmail.com>
2026-05-15 17:59:05 +07:00
..
blktrace.c blktrace: Fix output non-blktrace event when blk_classic option enabled 2023-01-07 12:07:20 +01:00
bpf_trace.c UPSTREAM: bpf: Use preempt_count() directly in bpf_send_signal_common() 2026-05-15 17:59:04 +07:00
ftrace.c This is the 4.9.334 stable release 2022-11-28 15:45:23 +00:00
gpu-traces.c
ipc_logging.c
ipc_logging_debug.c
ipc_logging_private.h
Kconfig BACKPORT: error-injection: Separate error-injection from kprobe 2026-05-15 17:56:33 +07:00
Makefile
msm_rtb.c
power-traces.c
ring_buffer.c ring_buffer: Do not deactivate non-existant pages 2022-11-25 17:35:40 +01:00
ring_buffer_benchmark.c
rpm-traces.c
trace.c Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-20 2023-01-19 15:42:12 +01:00
trace.h Merge remote-tracking branch 'common/android-4.9-q' into lineage-18.1-caf-sdm845 2021-12-27 02:07:39 +02:00
trace_benchmark.c
trace_benchmark.h
trace_branch.c
trace_clock.c tracing: Do no increment trace_clock_global() by one 2021-06-30 08:49:17 -04:00
trace_cpu_freq_switch.c
trace_entries.h tracing: Set kernel_stack's caller size properly 2020-10-01 20:40:05 +02:00
trace_event_perf.c BACKPORT: perf_event: Add support for LSM and SELinux checks 2026-05-15 17:59:05 +07:00
trace_events.c Merge remote-tracking branch 'common/android-4.9-q' into lineage-18.1-caf-sdm845 2021-12-27 02:07:39 +02:00
trace_events_filter.c
trace_events_filter_test.h
trace_events_hist.c tracing: Do not reference char * as a string in histograms 2021-07-20 16:21:11 +02:00
trace_events_trigger.c tracing: Fix event trigger to accept redundant spaces 2020-06-30 15:38:45 -04:00
trace_export.c
trace_functions.c tracing: Have all levels of checks prevent recursion 2021-10-27 09:34:01 +02:00
trace_functions_graph.c
trace_hwlat.c tracing/hwlat: Honor the tracing_cpumask 2020-08-26 10:29:03 +02:00
trace_irqsoff.c
trace_kdb.c tracing: Silence GCC 9 array bounds warning 2019-07-10 09:55:28 +02:00
trace_kprobe.c UPSTREAM: bpf: introduce bpf subcommand BPF_TASK_FD_QUERY 2026-05-15 17:56:33 +07:00
trace_mmiotrace.c
trace_nop.c
trace_output.c UPSTREAM: trace: add variant without spacing in trace_print_hex_seq 2026-05-15 17:54:49 +07:00
trace_output.h
trace_printk.c
trace_probe.c
trace_probe.h BACKPORT: bpf: add a bpf_override_function helper 2026-05-15 17:55:59 +07:00
trace_sched_switch.c
trace_sched_wakeup.c kernel/trace: Fix do not unregister tracepoints when register sched_migrate_task fail 2020-01-14 20:04:26 +01:00
trace_selftest.c ftrace: Handle tracing when switching between context 2020-11-10 10:24:02 +01:00
trace_selftest_dynamic.c
trace_seq.c
trace_stack.c tracing: Have stack tracer compile when MCOUNT_INSN_SIZE is not defined 2020-01-14 20:04:26 +01:00
trace_stat.c tracing: Fix very unlikely race of registering two stat tracers 2020-02-28 15:42:21 +01:00
trace_stat.h
trace_syscalls.c UPSTREAM: perf/bpf: fix a clang compilation issue 2026-05-15 17:55:22 +07:00
trace_uprobe.c UPSTREAM: bpf: introduce bpf subcommand BPF_TASK_FD_QUERY 2026-05-15 17:56:33 +07:00
tracing_map.c BACKPORT: atomics/treewide: Rename __atomic_add_unless() => atomic_fetch_add_unless() 2026-05-15 17:56:39 +07:00
tracing_map.h