diff options
author | David S. Miller <davem@davemloft.net> | 2014-06-11 19:02:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-11 19:02:55 -0400 |
commit | 902455e00720018d1dbd38327c3fd5bda6d844ee (patch) | |
tree | 02fc906c5bc318220ad4827c6eac2521b9d1fbbf /net | |
parent | 39f33367e420d88b3cbbd474e5bcc326338ef324 (diff) | |
parent | c5b46160877a9bb23ab6f96fb666e7766f407704 (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.c | 5 | ||||
-rw-r--r-- | net/core/rtnetlink.c | 3 | ||||
-rw-r--r-- | net/core/skbuff.c | 2 | ||||
-rw-r--r-- | net/dns_resolver/dns_query.c | 4 | ||||
-rw-r--r-- | net/ipv4/ip_tunnel.c | 16 | ||||
-rw-r--r-- | net/ipv4/ip_vti.c | 8 | ||||
-rw-r--r-- | net/ipv4/ipip.c | 4 | ||||
-rw-r--r-- | net/ipv6/output_core.c | 1 | ||||
-rw-r--r-- | net/ipv6/sit.c | 4 | ||||
-rw-r--r-- | net/mac80211/iface.c | 1 |
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 | */ |
6638 | void unregister_netdevice_many(struct list_head *head) | 6641 | void 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 | } |
6648 | EXPORT_SYMBOL(unregister_netdevice_many); | 6652 | EXPORT_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 | ||
1221 | static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = { | 1223 | static 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); |