ipv4: Don't pass IP fragments to upper layer GRO handlers.
authorSteffen Klassert <steffen.klassert@secunet.com>
Fri, 28 Apr 2017 08:54:32 +0000 (10:54 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 28 Apr 2017 20:00:38 +0000 (16:00 -0400)
Upper layer GRO handlers can not handle IP fragments, so
exit GRO processing in this case.

This fixes ESP GRO because the packet must be reassembled
before we can decapsulate, otherwise we get authentication
failures.

It also aligns IPv4 to IPv6 where packets with fragmentation
headers are not passed to upper layer GRO handlers.

Fixes: 7785bba299a8 ("esp: Add a software GRO codepath")
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/af_inet.c

index 6b1fc6e4278ef4f1cba58412977918af31d73e62..13a9a3297eae3ac48a77214e9365657202d44f08 100644 (file)
@@ -1343,6 +1343,9 @@ struct sk_buff **inet_gro_receive(struct sk_buff **head, struct sk_buff *skb)
        if (*(u8 *)iph != 0x45)
                goto out_unlock;
 
+       if (ip_is_fragment(iph))
+               goto out_unlock;
+
        if (unlikely(ip_fast_csum((u8 *)iph, 5)))
                goto out_unlock;