[NET]: Added GSO header verification
[linux-2.6.git] / net / ipv4 / tcp.c
index c04176b..0336422 100644 (file)
@@ -2145,7 +2145,7 @@ int compat_tcp_getsockopt(struct sock *sk, int level, int optname,
 EXPORT_SYMBOL(compat_tcp_getsockopt);
 #endif
 
-struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int sg)
+struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features)
 {
        struct sk_buff *segs = ERR_PTR(-EINVAL);
        struct tcphdr *th;
@@ -2166,10 +2166,14 @@ struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int sg)
        if (!pskb_may_pull(skb, thlen))
                goto out;
 
+       segs = NULL;
+       if (skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST))
+               goto out;
+
        oldlen = (u16)~skb->len;
        __skb_pull(skb, thlen);
 
-       segs = skb_segment(skb, sg);
+       segs = skb_segment(skb, features);
        if (IS_ERR(segs))
                goto out;