diff options
author | Andrii Nakryiko <andrii@kernel.org> | 2023-02-16 07:59:52 +0300 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2023-02-17 23:20:44 +0300 |
commit | d384dce281ed1b504fae2e279507827638d56fa3 (patch) | |
tree | 18dd9f650dca039d06f89a28977c950a06a4404e /kernel/resource.c | |
parent | 64f50f6575721ef03d001e907455cbe3baa2a5b1 (diff) | |
download | linux-d384dce281ed1b504fae2e279507827638d56fa3.tar.xz |
bpf: Fix global subprog context argument resolution logic
KPROBE program's user-facing context type is defined as typedef
bpf_user_pt_regs_t. This leads to a problem when trying to passing
kprobe/uprobe/usdt context argument into global subprog, as kernel
always strip away mods and typedefs of user-supplied type, but takes
expected type from bpf_ctx_convert as is, which causes mismatch.
Current way to work around this is to define a fake struct with the same
name as expected typedef:
struct bpf_user_pt_regs_t {};
__noinline my_global_subprog(struct bpf_user_pt_regs_t *ctx) { ... }
This patch fixes the issue by resolving expected type, if it's not
a struct. It still leaves the above work-around working for backwards
compatibility.
Fixes: 91cc1a99740e ("bpf: Annotate context types")
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Stanislav Fomichev <sdf@google.com>
Link: https://lore.kernel.org/bpf/20230216045954.3002473-2-andrii@kernel.org
Diffstat (limited to 'kernel/resource.c')
0 files changed, 0 insertions, 0 deletions