Merge branch 'master' into for-next
This commit is contained in:
@@ -1760,7 +1760,10 @@ static struct inet6_dev *addrconf_add_dev(struct net_device *dev)
|
||||
|
||||
idev = ipv6_find_idev(dev);
|
||||
if (!idev)
|
||||
return NULL;
|
||||
return ERR_PTR(-ENOBUFS);
|
||||
|
||||
if (idev->cnf.disable_ipv6)
|
||||
return ERR_PTR(-EACCES);
|
||||
|
||||
/* Add default multicast route */
|
||||
addrconf_add_mroute(dev);
|
||||
@@ -2129,8 +2132,9 @@ static int inet6_addr_add(struct net *net, int ifindex, struct in6_addr *pfx,
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
if ((idev = addrconf_add_dev(dev)) == NULL)
|
||||
return -ENOBUFS;
|
||||
idev = addrconf_add_dev(dev);
|
||||
if (IS_ERR(idev))
|
||||
return PTR_ERR(idev);
|
||||
|
||||
scope = ipv6_addr_scope(pfx);
|
||||
|
||||
@@ -2377,7 +2381,7 @@ static void addrconf_dev_config(struct net_device *dev)
|
||||
}
|
||||
|
||||
idev = addrconf_add_dev(dev);
|
||||
if (idev == NULL)
|
||||
if (IS_ERR(idev))
|
||||
return;
|
||||
|
||||
memset(&addr, 0, sizeof(struct in6_addr));
|
||||
@@ -2468,7 +2472,7 @@ static void addrconf_ip6_tnl_config(struct net_device *dev)
|
||||
ASSERT_RTNL();
|
||||
|
||||
idev = addrconf_add_dev(dev);
|
||||
if (!idev) {
|
||||
if (IS_ERR(idev)) {
|
||||
printk(KERN_DEBUG "init ip6-ip6: add_dev failed\n");
|
||||
return;
|
||||
}
|
||||
|
@@ -347,11 +347,12 @@ static const struct xfrm_type mip6_destopt_type =
|
||||
|
||||
static int mip6_rthdr_input(struct xfrm_state *x, struct sk_buff *skb)
|
||||
{
|
||||
struct ipv6hdr *iph = ipv6_hdr(skb);
|
||||
struct rt2_hdr *rt2 = (struct rt2_hdr *)skb->data;
|
||||
int err = rt2->rt_hdr.nexthdr;
|
||||
|
||||
spin_lock(&x->lock);
|
||||
if (!ipv6_addr_equal(&rt2->addr, (struct in6_addr *)x->coaddr) &&
|
||||
if (!ipv6_addr_equal(&iph->daddr, (struct in6_addr *)x->coaddr) &&
|
||||
!ipv6_addr_any((struct in6_addr *)x->coaddr))
|
||||
err = -ENOENT;
|
||||
spin_unlock(&x->lock);
|
||||
|
@@ -586,6 +586,7 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
|
||||
src_addr = solicited_addr;
|
||||
if (ifp->flags & IFA_F_OPTIMISTIC)
|
||||
override = 0;
|
||||
inc_opt |= ifp->idev->cnf.force_tllao;
|
||||
in6_ifa_put(ifp);
|
||||
} else {
|
||||
if (ipv6_dev_get_saddr(dev_net(dev), dev, daddr,
|
||||
@@ -599,7 +600,6 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
|
||||
icmp6h.icmp6_solicited = solicited;
|
||||
icmp6h.icmp6_override = override;
|
||||
|
||||
inc_opt |= ifp->idev->cnf.force_tllao;
|
||||
__ndisc_send(dev, neigh, daddr, src_addr,
|
||||
&icmp6h, solicited_addr,
|
||||
inc_opt ? ND_OPT_TARGET_LL_ADDR : 0);
|
||||
|
@@ -97,9 +97,11 @@ static void send_reset(struct net *net, struct sk_buff *oldskb)
|
||||
fl.fl_ip_dport = otcph.source;
|
||||
security_skb_classify_flow(oldskb, &fl);
|
||||
dst = ip6_route_output(net, NULL, &fl);
|
||||
if (dst == NULL)
|
||||
if (dst == NULL || dst->error) {
|
||||
dst_release(dst);
|
||||
return;
|
||||
if (dst->error || xfrm_lookup(net, &dst, &fl, NULL, 0))
|
||||
}
|
||||
if (xfrm_lookup(net, &dst, &fl, NULL, 0))
|
||||
return;
|
||||
|
||||
hh_len = (dst->dev->hard_header_len + 15)&~15;
|
||||
|
@@ -124,6 +124,8 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
|
||||
u8 nexthdr = nh[IP6CB(skb)->nhoff];
|
||||
|
||||
memset(fl, 0, sizeof(struct flowi));
|
||||
fl->mark = skb->mark;
|
||||
|
||||
ipv6_addr_copy(&fl->fl6_dst, reverse ? &hdr->saddr : &hdr->daddr);
|
||||
ipv6_addr_copy(&fl->fl6_src, reverse ? &hdr->daddr : &hdr->saddr);
|
||||
|
||||
|
Reference in New Issue
Block a user