]> Pileus Git - ~andy/linux/blobdiff - net/ipv4/af_inet.c
inet: fix a UFO regression
[~andy/linux] / net / ipv4 / af_inet.c
index 09d78d4a3cff0ede57130b6c0e6cae11aaa61c5c..68af9aac91d04543bdbbbd55997ae901491543fd 100644 (file)
@@ -1299,6 +1299,9 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
 
        segs = ERR_PTR(-EPROTONOSUPPORT);
 
+       /* Note : following gso_segment() might change skb->encapsulation */
+       udpfrag = !skb->encapsulation && proto == IPPROTO_UDP;
+
        ops = rcu_dereference(inet_offloads[proto]);
        if (likely(ops && ops->callbacks.gso_segment))
                segs = ops->callbacks.gso_segment(skb, features);
@@ -1306,7 +1309,6 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb,
        if (IS_ERR_OR_NULL(segs))
                goto out;
 
-       udpfrag = !!skb->encapsulation && proto == IPPROTO_UDP;
        skb = segs;
        do {
                iph = (struct iphdr *)(skb_mac_header(skb) + nhoff);