1 | // SPDX-License-Identifier: GPL-2.0 |
2 | |
3 | #include "vmlinux.h" |
4 | #include <bpf/bpf_helpers.h> |
5 | #include <bpf/bpf_tracing.h> |
6 | |
7 | #define PT_REGS_SIZE sizeof(struct pt_regs) |
8 | |
9 | /* |
10 | * The kernel struct pt_regs isn't exported in its entirety to userspace. |
11 | * Pass it as an array to task_pt_regs.c |
12 | */ |
13 | char current_regs[PT_REGS_SIZE] = {}; |
14 | char ctx_regs[PT_REGS_SIZE] = {}; |
15 | int uprobe_res = 0; |
16 | |
17 | SEC("uprobe" ) |
18 | int handle_uprobe(struct pt_regs *ctx) |
19 | { |
20 | struct task_struct *current; |
21 | struct pt_regs *regs; |
22 | |
23 | current = bpf_get_current_task_btf(); |
24 | regs = (struct pt_regs *) bpf_task_pt_regs(current); |
25 | if (bpf_probe_read_kernel(current_regs, PT_REGS_SIZE, regs)) |
26 | return 0; |
27 | if (bpf_probe_read_kernel(ctx_regs, PT_REGS_SIZE, ctx)) |
28 | return 0; |
29 | |
30 | /* Prove that uprobe was run */ |
31 | uprobe_res = 1; |
32 | |
33 | return 0; |
34 | } |
35 | |
36 | char _license[] SEC("license" ) = "GPL" ; |
37 | |