[NETFILTER] ip_conntrack: fix ftp/irc/tftp helpers on ports >= 32768
[powerpc.git] / net / ipv4 / ip_gre.c
index f0d5740..4e9c74b 100644 (file)
@@ -577,15 +577,16 @@ static int ipgre_rcv(struct sk_buff *skb)
                        goto drop_nolock;
 
                if (flags&GRE_CSUM) {
-                       if (skb->ip_summed == CHECKSUM_HW) {
+                       switch (skb->ip_summed) {
+                       case CHECKSUM_HW:
                                csum = (u16)csum_fold(skb->csum);
-                               if (csum)
-                                       skb->ip_summed = CHECKSUM_NONE;
-                       }
-                       if (skb->ip_summed == CHECKSUM_NONE) {
-                               skb->csum = skb_checksum(skb, 0, skb->len, 0);
+                               if (!csum)
+                                       break;
+                               /* fall through */
+                       case CHECKSUM_NONE:
+                               skb->csum = 0;
+                               csum = __skb_checksum_complete(skb);
                                skb->ip_summed = CHECKSUM_HW;
-                               csum = (u16)csum_fold(skb->csum);
                        }
                        offset += 4;
                }
@@ -1104,10 +1105,10 @@ static int ipgre_open(struct net_device *dev)
                        return -EADDRNOTAVAIL;
                dev = rt->u.dst.dev;
                ip_rt_put(rt);
-               if (__in_dev_get(dev) == NULL)
+               if (__in_dev_get_rtnl(dev) == NULL)
                        return -EADDRNOTAVAIL;
                t->mlink = dev->ifindex;
-               ip_mc_inc_group(__in_dev_get(dev), t->parms.iph.daddr);
+               ip_mc_inc_group(__in_dev_get_rtnl(dev), t->parms.iph.daddr);
        }
        return 0;
 }