From 29670fa9e73143c30739763c35f49c37a4319339 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Tue, 23 Aug 2011 22:54:33 +0000 Subject: [PATCH] --- yaml --- r: 263509 b: refs/heads/master c: 4b275d7efa1c4412f0d572fcd7f78ed0919370b3 h: refs/heads/master i: 263507: c0765671ab08f77679723808fa23210eac484cc4 v: v3 --- [refs] | 2 +- trunk/net/bridge/br_multicast.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 993dcdb000df..5b0357e9a548 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e05c4ad3ed874ee4f5e2c969e55d318ec654332c +refs/heads/master: 4b275d7efa1c4412f0d572fcd7f78ed0919370b3 diff --git a/trunk/net/bridge/br_multicast.c b/trunk/net/bridge/br_multicast.c index 2d85ca7111d3..22d2d1af1c83 100644 --- a/trunk/net/bridge/br_multicast.c +++ b/trunk/net/bridge/br_multicast.c @@ -1520,16 +1520,23 @@ static int br_multicast_ipv6_rcv(struct net_bridge *br, err = pskb_trim_rcsum(skb2, len); if (err) goto out; + err = -EINVAL; } + ip6h = ipv6_hdr(skb2); + switch (skb2->ip_summed) { case CHECKSUM_COMPLETE: - if (!csum_fold(skb2->csum)) + if (!csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, skb2->len, + IPPROTO_ICMPV6, skb2->csum)) break; /*FALLTHROUGH*/ case CHECKSUM_NONE: - skb2->csum = 0; - if (skb_checksum_complete(skb2)) + skb2->csum = ~csum_unfold(csum_ipv6_magic(&ip6h->saddr, + &ip6h->daddr, + skb2->len, + IPPROTO_ICMPV6, 0)); + if (__skb_checksum_complete(skb2)) goto out; }