summaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorNikita V. Shirokov <tehnerd@tehnerd.com>2018-04-25 07:15:03 -0700
committerDaniel Borkmann <daniel@iogearbox.net>2018-04-26 22:56:40 +0200
commitf761312023a1f0d625e34daadd54c3f9cb2a4ac2 (patch)
treeb613029c3576b321bf5850a4d03b2457718bb1fb /net/core
parent9b984a20ca84337af81cdab92d1e8ae37007894a (diff)
downloadlinux-stable-f761312023a1f0d625e34daadd54c3f9cb2a4ac2.tar.gz
linux-stable-f761312023a1f0d625e34daadd54c3f9cb2a4ac2.tar.bz2
linux-stable-f761312023a1f0d625e34daadd54c3f9cb2a4ac2.zip
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: 198d83bb3 (" bpf: make generic xdp compatible w/ bpf_xdp_adjust_tail") Signed-off-by: Nikita V. Shirokov <tehnerd@tehnerd.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index c624a04dad1f..8f8931b93140 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4057,8 +4057,10 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb,
* pckt.
*/
off = orig_data_end - xdp.data_end;
- if (off != 0)
+ if (off != 0) {
skb_set_tail_pointer(skb, xdp.data_end - xdp.data);
+ skb->len -= off;
+ }
switch (act) {
case XDP_REDIRECT: