Several places in IPV6 need to use pskb_trim_rcsum to handle
the case of skb's received on devices that set CHECKSUM_HW

Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]>

Index: csum/net/ipv6/exthdrs.c
===================================================================
--- csum.orig/net/ipv6/exthdrs.c        2005-07-28 21:53:09.000000000 -0700
+++ csum/net/ipv6/exthdrs.c     2005-09-06 20:57:04.000000000 -0700
@@ -455,15 +455,11 @@
                return 0;
        }
 
-       if (pkt_len > skb->len - sizeof(struct ipv6hdr)) {
+       if (pskb_trim_rcsum(skb, pkt_len + sizeof(struct ipv6hdr))) {
                IP6_INC_STATS_BH(IPSTATS_MIB_INTRUNCATEDPKTS);
                goto drop;
        }
-       if (pkt_len + sizeof(struct ipv6hdr) < skb->len) {
-               __pskb_trim(skb, pkt_len + sizeof(struct ipv6hdr));
-               if (skb->ip_summed == CHECKSUM_HW)
-                       skb->ip_summed = CHECKSUM_NONE;
-       }
+
        return 1;
 
 drop:
Index: csum/net/ipv6/reassembly.c
===================================================================
--- csum.orig/net/ipv6/reassembly.c     2005-07-28 21:53:09.000000000 -0700
+++ csum/net/ipv6/reassembly.c  2005-09-06 20:57:32.000000000 -0700
@@ -479,12 +479,9 @@
        /* Point into the IP datagram 'data' part. */
        if (!pskb_pull(skb, (u8 *) (fhdr + 1) - skb->data))
                goto err;
-       if (end-offset < skb->len) {
-               if (pskb_trim(skb, end - offset))
-                       goto err;
-               if (skb->ip_summed != CHECKSUM_UNNECESSARY)
-                       skb->ip_summed = CHECKSUM_NONE;
-       }
+
+       if (pskb_trim_rcsum(skb, end - offset))
+               goto err;
 
        /* Find out which fragments are in front and at the back of us
         * in the chain of fragments so far.  We must know where to put
Index: csum/net/ipv6/udp.c
===================================================================
--- csum.orig/net/ipv6/udp.c    2005-07-28 21:53:09.000000000 -0700
+++ csum/net/ipv6/udp.c 2005-09-06 20:57:52.000000000 -0700
@@ -482,13 +482,8 @@
                goto discard;
        }
 
-       if (ulen < skb->len) {
-               if (__pskb_trim(skb, ulen))
-                       goto discard;
-               saddr = &skb->nh.ipv6h->saddr;
-               daddr = &skb->nh.ipv6h->daddr;
-               uh = skb->h.uh;
-       }
+       if (pskb_trim_rcsum(skb, ulen))
+               goto discard;
 
        if (skb->ip_summed==CHECKSUM_HW) {
                skb->ip_summed = CHECKSUM_UNNECESSARY;
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to