android_kernel_sony_sdm845/kernel/trace
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Alexei Starovoitov 78e4d2ff30 UPSTREAM: bpf: Implement accurate raw_tp context access via BTF
libbpf analyzes bpf C program, searches in-kernel BTF for given type name
and stores it into expected_attach_type.
The kernel verifier expects this btf_id to point to something like:
typedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *skb, void *loc);
which represents signature of raw_tracepoint "kfree_skb".

Then btf_ctx_access() matches ctx+0 access in bpf program with 'skb'
and 'ctx+8' access with 'loc' arguments of "kfree_skb" tracepoint.
In first case it passes btf_id of 'struct sk_buff *' back to the verifier core
and 'void *' in second case.

Then the verifier tracks PTR_TO_BTF_ID as any other pointer type.
Like PTR_TO_SOCKET points to 'struct bpf_sock',
PTR_TO_TCP_SOCK points to 'struct bpf_tcp_sock', and so on.
PTR_TO_BTF_ID points to in-kernel structs.
If 1234 is btf_id of 'struct sk_buff' in vmlinux's BTF
then PTR_TO_BTF_ID#1234 points to one of in kernel skbs.

When PTR_TO_BTF_ID#1234 is dereferenced (like r2 = *(u64 *)r1 + 32)
the btf_struct_access() checks which field of 'struct sk_buff' is
at offset 32. Checks that size of access matches type definition
of the field and continues to track the dereferenced type.
If that field was a pointer to 'struct net_device' the r2's type
will be PTR_TO_BTF_ID#456. Where 456 is btf_id of 'struct net_device'
in vmlinux's BTF.

Such verifier analysis prevents "cheating" in BPF C program.
The program cannot cast arbitrary pointer to 'struct sk_buff *'
and access it. C compiler would allow type cast, of course,
but the verifier will notice type mismatch based on BPF assembly
and in-kernel BTF.

Change-Id: I06721c00d870df6de0279f213408df486a3a69c0
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20191016032505.2089704-7-ast@kernel.org
Signed-off-by: Sorayukii <sorayukii69@gmail.com>
2026-05-15 17:58:56 +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: Implement accurate raw_tp context access via BTF 2026-05-15 17:58:56 +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
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
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
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
trace_stat.c
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