]> git.hungrycats.org Git - linux/commit
bpf: Run generic devmap egress prog on private skb
authorSun Jian <sun.jian.kdev@gmail.com>
Fri, 12 Jun 2026 11:40:31 +0000 (19:40 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 13 Jun 2026 01:21:01 +0000 (18:21 -0700)
commit6001896f00984d317fb75160ba05c4a885fbe2a0
tree88739ffe2fc90284bae3450cf6c5c6221796e005
parent30dee2c176e7954f63d1fa3e52d172f30beb9bfb
bpf: Run generic devmap egress prog on private skb

Generic XDP devmap multi redirect uses skb_clone() for intermediate
destinations and sends the last destination with the original skb. This
can leave multiple destinations sharing the same packet data.

This becomes visible after generic devmap egress-program support was
added: a devmap egress program may mutate packet data, and another
destination sharing the same data can observe that mutation.

Native XDP broadcast redirect does not have this issue because
xdpf_clone() copies the frame data for each destination. Generic XDP
should provide the same per-destination isolation before running a
devmap egress program.

Fix this by making cloned skbs private before running the generic devmap
egress program. Use skb_copy() instead of skb_unshare() so allocation
failure does not consume the skb and the existing caller error paths keep
their ownership semantics.

Fixes: 2ea5eabaf04a ("bpf: devmap: Implement devmap prog execution for generic XDP")
Suggested-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Suggested-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Sun Jian <sun.jian.kdev@gmail.com>
Link: https://lore.kernel.org/r/20260612114032.244616-2-sun.jian.kdev@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/devmap.c