|  | // SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | #include "vmlinux.h" | 
|  | #include <bpf/bpf_helpers.h> | 
|  | #include <bpf/bpf_tracing.h> | 
|  |  | 
|  | #define PT_REGS_SIZE sizeof(struct pt_regs) | 
|  |  | 
|  | /* | 
|  | * The kernel struct pt_regs isn't exported in its entirety to userspace. | 
|  | * Pass it as an array to task_pt_regs.c | 
|  | */ | 
|  | char current_regs[PT_REGS_SIZE] = {}; | 
|  | char ctx_regs[PT_REGS_SIZE] = {}; | 
|  | int uprobe_res = 0; | 
|  |  | 
|  | SEC("uprobe") | 
|  | int handle_uprobe(struct pt_regs *ctx) | 
|  | { | 
|  | struct task_struct *current; | 
|  | struct pt_regs *regs; | 
|  |  | 
|  | current = bpf_get_current_task_btf(); | 
|  | regs = (struct pt_regs *) bpf_task_pt_regs(current); | 
|  | if (bpf_probe_read_kernel(current_regs, PT_REGS_SIZE, regs)) | 
|  | return 0; | 
|  | if (bpf_probe_read_kernel(ctx_regs, PT_REGS_SIZE, ctx)) | 
|  | return 0; | 
|  |  | 
|  | /* Prove that uprobe was run */ | 
|  | uprobe_res = 1; | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | char _license[] SEC("license") = "GPL"; |