From 18216e3281b86b16079e29952f706b2a9a15569a Mon Sep 17 00:00:00 2001 From: Ville Nuorvala Date: Fri, 24 Nov 2006 17:06:53 -0800 Subject: [PATCH] --- yaml --- r: 41870 b: refs/heads/master c: 305d4b3ce8c2f00643edc3bb19f005f72e8f84fc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/ipv6/ip6_tunnel.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 530ae2822264..14ad7f3f824c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 09c6bbf090ecb52c8d670fa4d5730be134a8ec8b +refs/heads/master: 305d4b3ce8c2f00643edc3bb19f005f72e8f84fc diff --git a/trunk/net/ipv6/ip6_tunnel.c b/trunk/net/ipv6/ip6_tunnel.c index 22debbf28b8a..3944ea24c38c 100644 --- a/trunk/net/ipv6/ip6_tunnel.c +++ b/trunk/net/ipv6/ip6_tunnel.c @@ -460,6 +460,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, if (rel_msg && pskb_may_pull(skb, offset + sizeof (*ipv6h))) { struct rt6_info *rt; struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); + if (!skb2) goto out; @@ -824,7 +825,7 @@ static void ip6_tnl_set_cap(struct ip6_tnl *t) if (ltype & (IPV6_ADDR_UNICAST|IPV6_ADDR_MULTICAST) && rtype & (IPV6_ADDR_UNICAST|IPV6_ADDR_MULTICAST) && !((ltype|rtype) & IPV6_ADDR_LOOPBACK) && - !((ltype|rtype) & IPV6_ADDR_LINKLOCAL)) { + (!((ltype|rtype) & IPV6_ADDR_LINKLOCAL) || p->link)) { if (ltype&IPV6_ADDR_UNICAST) p->flags |= IP6_TNL_F_CAP_XMIT; if (rtype&IPV6_ADDR_UNICAST) @@ -862,8 +863,11 @@ static void ip6ip6_tnl_link_config(struct ip6_tnl *t) dev->iflink = p->link; if (p->flags & IP6_TNL_F_CAP_XMIT) { + int strict = (ipv6_addr_type(&p->raddr) & + (IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL)); + struct rt6_info *rt = rt6_lookup(&p->raddr, &p->laddr, - p->link, 0); + p->link, strict); if (rt == NULL) return;