OSDN Git Service

udp: allow header check for dodgy GSO_UDP_L4 packets.
authorAndrew Melnychenko <andrew@daynix.com>
Wed, 7 Dec 2022 11:35:53 +0000 (13:35 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Dec 2022 09:29:56 +0000 (09:29 +0000)
Allow UDP_L4 for robust packets.

Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Andrew Melnychenko <andrew@daynix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/udp_offload.c
net/ipv6/udp_offload.c

index aedde65..1f01e15 100644 (file)
@@ -387,7 +387,8 @@ static struct sk_buff *udp4_ufo_fragment(struct sk_buff *skb,
        if (!pskb_may_pull(skb, sizeof(struct udphdr)))
                goto out;
 
-       if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4)
+       if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4 &&
+           !skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST))
                return __udp_gso_segment(skb, features, false);
 
        mss = skb_shinfo(skb)->gso_size;
index e0e10f6..c39c1e3 100644 (file)
@@ -42,7 +42,8 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb,
                if (!pskb_may_pull(skb, sizeof(struct udphdr)))
                        goto out;
 
-               if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4)
+               if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4 &&
+                   !skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST))
                        return __udp_gso_segment(skb, features, true);
 
                mss = skb_shinfo(skb)->gso_size;