Commit f7613120 authored by Nikita V. Shirokov's avatar Nikita V. Shirokov Committed by Daniel Borkmann

bpf: fix xdp_generic for bpf_adjust_tail usecase

When bpf_adjust_tail was introduced for generic xdp, it changed skb's tail
pointer, so it was pointing to the new "end of the packet". However skb's
len field wasn't properly modified, so on the wire ethernet frame had
original (or even bigger, if adjust_head was used) size. This diff is
fixing this.

Fixes: 198d83bb (" bpf: make generic xdp compatible w/ bpf_xdp_adjust_tail")
Signed-off-by: default avatarNikita V. Shirokov <tehnerd@tehnerd.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 9b984a20
...@@ -4057,8 +4057,10 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb, ...@@ -4057,8 +4057,10 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb,
* pckt. * pckt.
*/ */
off = orig_data_end - xdp.data_end; off = orig_data_end - xdp.data_end;
if (off != 0) if (off != 0) {
skb_set_tail_pointer(skb, xdp.data_end - xdp.data); skb_set_tail_pointer(skb, xdp.data_end - xdp.data);
skb->len -= off;
}
switch (act) { switch (act) {
case XDP_REDIRECT: case XDP_REDIRECT:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment