summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-06-11 19:02:55 -0400
committerDavid S. Miller <davem@davemloft.net>2014-06-11 19:02:55 -0400
commit902455e00720018d1dbd38327c3fd5bda6d844ee (patch)
tree02fc906c5bc318220ad4827c6eac2521b9d1fbbf /net
parent39f33367e420d88b3cbbd474e5bcc326338ef324 (diff)
parentc5b46160877a9bb23ab6f96fb666e7766f407704 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: net/core/rtnetlink.c net/core/skbuff.c Both conflicts were very simple overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/core/dev.c5
-rw-r--r--net/core/rtnetlink.c3
-rw-r--r--net/core/skbuff.c2
-rw-r--r--net/dns_resolver/dns_query.c4
-rw-r--r--net/ipv4/ip_tunnel.c16
-rw-r--r--net/ipv4/ip_vti.c8
-rw-r--r--net/ipv4/ipip.c4
-rw-r--r--net/ipv6/output_core.c1
-rw-r--r--net/ipv6/sit.c4
-rw-r--r--net/mac80211/iface.c1
10 files changed, 32 insertions, 16 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index ed8fe62d41af..ab6c491bd2d3 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6634,6 +6634,9 @@ EXPORT_SYMBOL(unregister_netdevice_queue);
6634/** 6634/**
6635 * unregister_netdevice_many - unregister many devices 6635 * unregister_netdevice_many - unregister many devices
6636 * @head: list of devices 6636 * @head: list of devices
6637 *
6638 * Note: As most callers use a stack allocated list_head,
6639 * we force a list_del() to make sure stack wont be corrupted later.
6637 */ 6640 */
6638void unregister_netdevice_many(struct list_head *head) 6641void unregister_netdevice_many(struct list_head *head)
6639{ 6642{
@@ -6643,6 +6646,7 @@ void unregister_netdevice_many(struct list_head *head)
6643 rollback_registered_many(head); 6646 rollback_registered_many(head);
6644 list_for_each_entry(dev, head, unreg_list) 6647 list_for_each_entry(dev, head, unreg_list)
6645 net_set_todo(dev); 6648 net_set_todo(dev);
6649 list_del(head);
6646 } 6650 }
6647} 6651}
6648EXPORT_SYMBOL(unregister_netdevice_many); 6652EXPORT_SYMBOL(unregister_netdevice_many);
@@ -7098,7 +7102,6 @@ static void __net_exit default_device_exit_batch(struct list_head *net_list)
7098 } 7102 }
7099 } 7103 }
7100 unregister_netdevice_many(&dev_kill_list); 7104 unregister_netdevice_many(&dev_kill_list);
7101 list_del(&dev_kill_list);
7102 rtnl_unlock(); 7105 rtnl_unlock();
7103} 7106}
7104 7107
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 741b22c62acf..233b5ae87583 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1216,6 +1216,8 @@ static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
1216 .len = sizeof(struct ifla_vf_spoofchk) }, 1216 .len = sizeof(struct ifla_vf_spoofchk) },
1217 [IFLA_VF_RATE] = { .type = NLA_BINARY, 1217 [IFLA_VF_RATE] = { .type = NLA_BINARY,
1218 .len = sizeof(struct ifla_vf_rate) }, 1218 .len = sizeof(struct ifla_vf_rate) },
1219 [IFLA_VF_LINK_STATE] = { .type = NLA_BINARY,
1220 .len = sizeof(struct ifla_vf_link_state) },
1219}; 1221};
1220 1222
1221static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = { 1223static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
@@ -1770,7 +1772,6 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
1770 1772
1771 ops->dellink(dev, &list_kill); 1773 ops->dellink(dev, &list_kill);
1772 unregister_netdevice_many(&list_kill); 1774 unregister_netdevice_many(&list_kill);
1773 list_del(&list_kill);
1774 return 0; 1775 return 0;
1775} 1776}
1776 1777
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index b9e85e6cb26a..bf92824af3f7 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -2885,6 +2885,7 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,
2885 int pos; 2885 int pos;
2886 int dummy; 2886 int dummy;
2887 2887
2888 __skb_push(head_skb, doffset);
2888 proto = skb_network_protocol(head_skb, &dummy); 2889 proto = skb_network_protocol(head_skb, &dummy);
2889 if (unlikely(!proto)) 2890 if (unlikely(!proto))
2890 return ERR_PTR(-EINVAL); 2891 return ERR_PTR(-EINVAL);
@@ -2892,7 +2893,6 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,
2892 csum = !head_skb->encap_hdr_csum && 2893 csum = !head_skb->encap_hdr_csum &&
2893 !!can_checksum_protocol(features, proto); 2894 !!can_checksum_protocol(features, proto);
2894 2895
2895 __skb_push(head_skb, doffset);
2896 headroom = skb_headroom(head_skb); 2896 headroom = skb_headroom(head_skb);
2897 pos = skb_headlen(head_skb); 2897 pos = skb_headlen(head_skb);
2898 2898
diff --git a/net/dns_resolver/dns_query.c b/net/dns_resolver/dns_query.c
index 5b499589613f..9acec61f5433 100644
--- a/net/dns_resolver/dns_query.c
+++ b/net/dns_resolver/dns_query.c
@@ -149,7 +149,9 @@ int dns_query(const char *type, const char *name, size_t namelen,
149 if (!*_result) 149 if (!*_result)
150 goto put; 150 goto put;
151 151
152 memcpy(*_result, upayload->data, len + 1); 152 memcpy(*_result, upayload->data, len);
153 *_result[len] = '\0';
154
153 if (_expiry) 155 if (_expiry)
154 *_expiry = rkey->expiry; 156 *_expiry = rkey->expiry;
155 157
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index 86a00bd6684c..097b3e7c1e8f 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -268,6 +268,7 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,
268 __be32 remote = parms->iph.daddr; 268 __be32 remote = parms->iph.daddr;
269 __be32 local = parms->iph.saddr; 269 __be32 local = parms->iph.saddr;
270 __be32 key = parms->i_key; 270 __be32 key = parms->i_key;
271 __be16 flags = parms->i_flags;
271 int link = parms->link; 272 int link = parms->link;
272 struct ip_tunnel *t = NULL; 273 struct ip_tunnel *t = NULL;
273 struct hlist_head *head = ip_bucket(itn, parms); 274 struct hlist_head *head = ip_bucket(itn, parms);
@@ -275,9 +276,9 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,
275 hlist_for_each_entry_rcu(t, head, hash_node) { 276 hlist_for_each_entry_rcu(t, head, hash_node) {
276 if (local == t->parms.iph.saddr && 277 if (local == t->parms.iph.saddr &&
277 remote == t->parms.iph.daddr && 278 remote == t->parms.iph.daddr &&
278 key == t->parms.i_key &&
279 link == t->parms.link && 279 link == t->parms.link &&
280 type == t->dev->type) 280 type == t->dev->type &&
281 ip_tunnel_key_match(&t->parms, flags, key))
281 break; 282 break;
282 } 283 }
283 return t; 284 return t;
@@ -667,6 +668,7 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
667 dev->needed_headroom = max_headroom; 668 dev->needed_headroom = max_headroom;
668 669
669 if (skb_cow_head(skb, dev->needed_headroom)) { 670 if (skb_cow_head(skb, dev->needed_headroom)) {
671 ip_rt_put(rt);
670 dev->stats.tx_dropped++; 672 dev->stats.tx_dropped++;
671 kfree_skb(skb); 673 kfree_skb(skb);
672 return; 674 return;
@@ -746,10 +748,12 @@ int ip_tunnel_ioctl(struct net_device *dev, struct ip_tunnel_parm *p, int cmd)
746 goto done; 748 goto done;
747 if (p->iph.ttl) 749 if (p->iph.ttl)
748 p->iph.frag_off |= htons(IP_DF); 750 p->iph.frag_off |= htons(IP_DF);
749 if (!(p->i_flags&TUNNEL_KEY)) 751 if (!(p->i_flags & VTI_ISVTI)) {
750 p->i_key = 0; 752 if (!(p->i_flags & TUNNEL_KEY))
751 if (!(p->o_flags&TUNNEL_KEY)) 753 p->i_key = 0;
752 p->o_key = 0; 754 if (!(p->o_flags & TUNNEL_KEY))
755 p->o_key = 0;
756 }
753 757
754 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type); 758 t = ip_tunnel_find(itn, p, itn->fb_tunnel_dev->type);
755 759
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index 13ef00f1e17b..b8960f3527f3 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -313,7 +313,13 @@ vti_tunnel_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
313 return -EINVAL; 313 return -EINVAL;
314 } 314 }
315 315
316 p.i_flags |= VTI_ISVTI; 316 if (!(p.i_flags & GRE_KEY))
317 p.i_key = 0;
318 if (!(p.o_flags & GRE_KEY))
319 p.o_key = 0;
320
321 p.i_flags = VTI_ISVTI;
322
317 err = ip_tunnel_ioctl(dev, &p, cmd); 323 err = ip_tunnel_ioctl(dev, &p, cmd);
318 if (err) 324 if (err)
319 return err; 325 return err;
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index 4bc508f0db90..62eaa005e146 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -149,13 +149,13 @@ static int ipip_err(struct sk_buff *skb, u32 info)
149 149
150 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) { 150 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
151 ipv4_update_pmtu(skb, dev_net(skb->dev), info, 151 ipv4_update_pmtu(skb, dev_net(skb->dev), info,
152 t->dev->ifindex, 0, IPPROTO_IPIP, 0); 152 t->parms.link, 0, IPPROTO_IPIP, 0);
153 err = 0; 153 err = 0;
154 goto out; 154 goto out;
155 } 155 }
156 156
157 if (type == ICMP_REDIRECT) { 157 if (type == ICMP_REDIRECT) {
158 ipv4_redirect(skb, dev_net(skb->dev), t->dev->ifindex, 0, 158 ipv4_redirect(skb, dev_net(skb->dev), t->parms.link, 0,
159 IPPROTO_IPIP, 0); 159 IPPROTO_IPIP, 0);
160 err = 0; 160 err = 0;
161 goto out; 161 goto out;
diff --git a/net/ipv6/output_core.c b/net/ipv6/output_core.c
index ffa029305a09..5ec867e4a8b7 100644
--- a/net/ipv6/output_core.c
+++ b/net/ipv6/output_core.c
@@ -78,6 +78,7 @@ int __ip6_local_out(struct sk_buff *skb)
78 if (len > IPV6_MAXPLEN) 78 if (len > IPV6_MAXPLEN)
79 len = 0; 79 len = 0;
80 ipv6_hdr(skb)->payload_len = htons(len); 80 ipv6_hdr(skb)->payload_len = htons(len);
81 IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
81 82
82 return nf_hook(NFPROTO_IPV6, NF_INET_LOCAL_OUT, skb, NULL, 83 return nf_hook(NFPROTO_IPV6, NF_INET_LOCAL_OUT, skb, NULL,
83 skb_dst(skb)->dev, dst_output); 84 skb_dst(skb)->dev, dst_output);
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index f4380041f5e7..4f408176dc64 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -560,12 +560,12 @@ static int ipip6_err(struct sk_buff *skb, u32 info)
560 560
561 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) { 561 if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
562 ipv4_update_pmtu(skb, dev_net(skb->dev), info, 562 ipv4_update_pmtu(skb, dev_net(skb->dev), info,
563 t->dev->ifindex, 0, IPPROTO_IPV6, 0); 563 t->parms.link, 0, IPPROTO_IPV6, 0);
564 err = 0; 564 err = 0;
565 goto out; 565 goto out;
566 } 566 }
567 if (type == ICMP_REDIRECT) { 567 if (type == ICMP_REDIRECT) {
568 ipv4_redirect(skb, dev_net(skb->dev), t->dev->ifindex, 0, 568 ipv4_redirect(skb, dev_net(skb->dev), t->parms.link, 0,
569 IPPROTO_IPV6, 0); 569 IPPROTO_IPV6, 0);
570 err = 0; 570 err = 0;
571 goto out; 571 goto out;
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 81a8e2a0b6aa..388b863e821c 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -1780,7 +1780,6 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local)
1780 } 1780 }
1781 mutex_unlock(&local->iflist_mtx); 1781 mutex_unlock(&local->iflist_mtx);
1782 unregister_netdevice_many(&unreg_list); 1782 unregister_netdevice_many(&unreg_list);
1783 list_del(&unreg_list);
1784 1783
1785 list_for_each_entry_safe(sdata, tmp, &wdev_list, list) { 1784 list_for_each_entry_safe(sdata, tmp, &wdev_list, list) {
1786 list_del(&sdata->list); 1785 list_del(&sdata->list);