Skip to content

Commit 13062e5

Browse files
Philo LuKernel Patches Daemon
Philo Lu
authored and
Kernel Patches Daemon
committed
bpf: Allow bpf_dynptr_from_skb() for tp_btf
Making tp_btf able to use bpf_dynptr_from_skb(), which is useful for skb parsing, especially for non-linear paged skb data. This is achieved by adding KF_TRUSTED_ARGS flag to bpf_dynptr_from_skb and registering it for TRACING progs. With KF_TRUSTED_ARGS, args from fentry/fexit are excluded, so that unsafe progs like fexit/__kfree_skb are not allowed. We also need the skb dynptr to be read-only in tp_btf. Because may_access_direct_pkt_data() returns false by default when checking bpf_dynptr_from_skb, there is no need to add BPF_PROG_TYPE_TRACING to it explicitly. Signed-off-by: Philo Lu <[email protected]>
1 parent 8cab573 commit 13062e5

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

net/core/filter.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11992,7 +11992,7 @@ int bpf_dynptr_from_skb_rdonly(struct sk_buff *skb, u64 flags,
1199211992
}
1199311993

1199411994
BTF_KFUNCS_START(bpf_kfunc_check_set_skb)
11995-
BTF_ID_FLAGS(func, bpf_dynptr_from_skb)
11995+
BTF_ID_FLAGS(func, bpf_dynptr_from_skb, KF_TRUSTED_ARGS)
1199611996
BTF_KFUNCS_END(bpf_kfunc_check_set_skb)
1199711997

1199811998
BTF_KFUNCS_START(bpf_kfunc_check_set_xdp)
@@ -12041,6 +12041,7 @@ static int __init bpf_kfunc_init(void)
1204112041
ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_LWT_XMIT, &bpf_kfunc_set_skb);
1204212042
ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_LWT_SEG6LOCAL, &bpf_kfunc_set_skb);
1204312043
ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_NETFILTER, &bpf_kfunc_set_skb);
12044+
ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &bpf_kfunc_set_skb);
1204412045
ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_XDP, &bpf_kfunc_set_xdp);
1204512046
ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_CGROUP_SOCK_ADDR,
1204612047
&bpf_kfunc_set_sock_addr);

0 commit comments

Comments
 (0)