aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/bridge/br_fdb.c4
-rw-r--r--net/caif/caif_dev.c16
-rw-r--r--net/caif/caif_usb.c3
-rw-r--r--net/core/dev.c32
-rw-r--r--net/core/net-sysfs.c2
-rw-r--r--net/core/secure_seq.c2
-rw-r--r--net/ipv4/inetpeer.c3
-rw-r--r--net/ipv4/ipconfig.c8
-rw-r--r--net/ipv4/ping.c27
-rw-r--r--net/ipv4/udp_diag.c1
-rw-r--r--net/ipv6/datagram.c2
-rw-r--r--net/ipv6/proc.c4
-rw-r--r--net/ipv6/route.c1
-rw-r--r--net/mac80211/cfg.c2
-rw-r--r--net/mac80211/rx.c1
-rw-r--r--net/mac80211/sta_info.c6
-rw-r--r--net/mac80211/tx.c10
-rw-r--r--net/mac80211/wpa.c19
-rw-r--r--net/mac80211/wpa.h2
-rw-r--r--net/netfilter/ipset/ip_set_core.c37
-rw-r--r--net/netfilter/nf_conntrack_helper.c12
-rw-r--r--net/netfilter/nf_conntrack_netlink.c4
-rw-r--r--net/netfilter/xt_CT.c8
-rw-r--r--net/netfilter/xt_hashlimit.c5
-rw-r--r--net/openvswitch/datapath.c8
-rw-r--r--net/openvswitch/datapath.h1
-rw-r--r--net/openvswitch/flow.c1
-rw-r--r--net/openvswitch/vport-internal_dev.c1
-rw-r--r--net/openvswitch/vport.c1
29 files changed, 123 insertions, 100 deletions
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index f963f6b1884f..5ba0c844d508 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -146,7 +146,7 @@ void br_fdb_cleanup(unsigned long _data)
146 unsigned long next_timer = jiffies + br->ageing_time; 146 unsigned long next_timer = jiffies + br->ageing_time;
147 int i; 147 int i;
148 148
149 spin_lock_bh(&br->hash_lock); 149 spin_lock(&br->hash_lock);
150 for (i = 0; i < BR_HASH_SIZE; i++) { 150 for (i = 0; i < BR_HASH_SIZE; i++) {
151 struct net_bridge_fdb_entry *f; 151 struct net_bridge_fdb_entry *f;
152 struct hlist_node *h, *n; 152 struct hlist_node *h, *n;
@@ -162,7 +162,7 @@ void br_fdb_cleanup(unsigned long _data)
162 next_timer = this_timer; 162 next_timer = this_timer;
163 } 163 }
164 } 164 }
165 spin_unlock_bh(&br->hash_lock); 165 spin_unlock(&br->hash_lock);
166 166
167 mod_timer(&br->gc_timer, round_jiffies_up(next_timer)); 167 mod_timer(&br->gc_timer, round_jiffies_up(next_timer));
168} 168}
diff --git a/net/caif/caif_dev.c b/net/caif/caif_dev.c
index 61570ee76fe6..673728add60b 100644
--- a/net/caif/caif_dev.c
+++ b/net/caif/caif_dev.c
@@ -146,15 +146,17 @@ void caif_flow_cb(struct sk_buff *skb)
146 spin_lock_bh(&caifd->flow_lock); 146 spin_lock_bh(&caifd->flow_lock);
147 send_xoff = caifd->xoff; 147 send_xoff = caifd->xoff;
148 caifd->xoff = 0; 148 caifd->xoff = 0;
149 if (!WARN_ON(caifd->xoff_skb_dtor == NULL)) { 149 dtor = caifd->xoff_skb_dtor;
150 WARN_ON(caifd->xoff_skb != skb); 150
151 dtor = caifd->xoff_skb_dtor; 151 if (WARN_ON(caifd->xoff_skb != skb))
152 caifd->xoff_skb = NULL; 152 skb = NULL;
153 caifd->xoff_skb_dtor = NULL; 153
154 } 154 caifd->xoff_skb = NULL;
155 caifd->xoff_skb_dtor = NULL;
156
155 spin_unlock_bh(&caifd->flow_lock); 157 spin_unlock_bh(&caifd->flow_lock);
156 158
157 if (dtor) 159 if (dtor && skb)
158 dtor(skb); 160 dtor(skb);
159 161
160 if (send_xoff) 162 if (send_xoff)
diff --git a/net/caif/caif_usb.c b/net/caif/caif_usb.c
index 5fc9eca8cd41..fd7cbf5aa895 100644
--- a/net/caif/caif_usb.c
+++ b/net/caif/caif_usb.c
@@ -11,7 +11,6 @@
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/netdevice.h> 12#include <linux/netdevice.h>
13#include <linux/slab.h> 13#include <linux/slab.h>
14#include <linux/netdevice.h>
15#include <linux/mii.h> 14#include <linux/mii.h>
16#include <linux/usb.h> 15#include <linux/usb.h>
17#include <linux/usb/usbnet.h> 16#include <linux/usb/usbnet.h>
@@ -27,7 +26,7 @@ MODULE_LICENSE("GPL");
27#define CFUSB_ALIGNMENT 4 /* Number of bytes to align. */ 26#define CFUSB_ALIGNMENT 4 /* Number of bytes to align. */
28#define CFUSB_MAX_HEADLEN (CFUSB_PAD_DESCR_SZ + CFUSB_ALIGNMENT-1) 27#define CFUSB_MAX_HEADLEN (CFUSB_PAD_DESCR_SZ + CFUSB_ALIGNMENT-1)
29#define STE_USB_VID 0x04cc /* USB Product ID for ST-Ericsson */ 28#define STE_USB_VID 0x04cc /* USB Product ID for ST-Ericsson */
30#define STE_USB_PID_CAIF 0x2306 /* Product id for CAIF Modems */ 29#define STE_USB_PID_CAIF 0x230f /* Product id for CAIF Modems */
31 30
32struct cfusbl { 31struct cfusbl {
33 struct cflayer layer; 32 struct cflayer layer;
diff --git a/net/core/dev.c b/net/core/dev.c
index f494675471a9..115dee1d985d 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1887,6 +1887,23 @@ void skb_set_dev(struct sk_buff *skb, struct net_device *dev)
1887EXPORT_SYMBOL(skb_set_dev); 1887EXPORT_SYMBOL(skb_set_dev);
1888#endif /* CONFIG_NET_NS */ 1888#endif /* CONFIG_NET_NS */
1889 1889
1890static void skb_warn_bad_offload(const struct sk_buff *skb)
1891{
1892 static const netdev_features_t null_features = 0;
1893 struct net_device *dev = skb->dev;
1894 const char *driver = "";
1895
1896 if (dev && dev->dev.parent)
1897 driver = dev_driver_string(dev->dev.parent);
1898
1899 WARN(1, "%s: caps=(%pNF, %pNF) len=%d data_len=%d gso_size=%d "
1900 "gso_type=%d ip_summed=%d\n",
1901 driver, dev ? &dev->features : &null_features,
1902 skb->sk ? &skb->sk->sk_route_caps : &null_features,
1903 skb->len, skb->data_len, skb_shinfo(skb)->gso_size,
1904 skb_shinfo(skb)->gso_type, skb->ip_summed);
1905}
1906
1890/* 1907/*
1891 * Invalidate hardware checksum when packet is to be mangled, and 1908 * Invalidate hardware checksum when packet is to be mangled, and
1892 * complete checksum manually on outgoing path. 1909 * complete checksum manually on outgoing path.
@@ -1900,8 +1917,8 @@ int skb_checksum_help(struct sk_buff *skb)
1900 goto out_set_summed; 1917 goto out_set_summed;
1901 1918
1902 if (unlikely(skb_shinfo(skb)->gso_size)) { 1919 if (unlikely(skb_shinfo(skb)->gso_size)) {
1903 /* Let GSO fix up the checksum. */ 1920 skb_warn_bad_offload(skb);
1904 goto out_set_summed; 1921 return -EINVAL;
1905 } 1922 }
1906 1923
1907 offset = skb_checksum_start_offset(skb); 1924 offset = skb_checksum_start_offset(skb);
@@ -1961,16 +1978,7 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb,
1961 __skb_pull(skb, skb->mac_len); 1978 __skb_pull(skb, skb->mac_len);
1962 1979
1963 if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) { 1980 if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) {
1964 struct net_device *dev = skb->dev; 1981 skb_warn_bad_offload(skb);
1965 struct ethtool_drvinfo info = {};
1966
1967 if (dev && dev->ethtool_ops && dev->ethtool_ops->get_drvinfo)
1968 dev->ethtool_ops->get_drvinfo(dev, &info);
1969
1970 WARN(1, "%s: caps=(%pNF, %pNF) len=%d data_len=%d ip_summed=%d\n",
1971 info.driver, dev ? &dev->features : NULL,
1972 skb->sk ? &skb->sk->sk_route_caps : NULL,
1973 skb->len, skb->data_len, skb->ip_summed);
1974 1982
1975 if (skb_header_cloned(skb) && 1983 if (skb_header_cloned(skb) &&
1976 (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC))) 1984 (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC)))
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index f3dbd4f596a4..a1727cda03d7 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -929,7 +929,7 @@ static ssize_t bql_show_inflight(struct netdev_queue *queue,
929} 929}
930 930
931static struct netdev_queue_attribute bql_inflight_attribute = 931static struct netdev_queue_attribute bql_inflight_attribute =
932 __ATTR(inflight, S_IRUGO | S_IWUSR, bql_show_inflight, NULL); 932 __ATTR(inflight, S_IRUGO, bql_show_inflight, NULL);
933 933
934#define BQL_ATTR(NAME, FIELD) \ 934#define BQL_ATTR(NAME, FIELD) \
935static ssize_t bql_show_ ## NAME(struct netdev_queue *queue, \ 935static ssize_t bql_show_ ## NAME(struct netdev_queue *queue, \
diff --git a/net/core/secure_seq.c b/net/core/secure_seq.c
index 6fd44606fdd1..99b2596531bb 100644
--- a/net/core/secure_seq.c
+++ b/net/core/secure_seq.c
@@ -46,7 +46,7 @@ __u32 secure_tcpv6_sequence_number(const __be32 *saddr, const __be32 *daddr,
46 46
47 memcpy(hash, saddr, 16); 47 memcpy(hash, saddr, 16);
48 for (i = 0; i < 4; i++) 48 for (i = 0; i < 4; i++)
49 secret[i] = net_secret[i] + daddr[i]; 49 secret[i] = net_secret[i] + (__force u32)daddr[i];
50 secret[4] = net_secret[4] + 50 secret[4] = net_secret[4] +
51 (((__force u16)sport << 16) + (__force u16)dport); 51 (((__force u16)sport << 16) + (__force u16)dport);
52 for (i = 5; i < MD5_MESSAGE_BYTES / 4; i++) 52 for (i = 5; i < MD5_MESSAGE_BYTES / 4; i++)
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index 86f13c67ea85..bf4a9c4808e1 100644
--- a/net/ipv4/inetpeer.c
+++ b/net/ipv4/inetpeer.c
@@ -136,7 +136,7 @@ static int addr_compare(const struct inetpeer_addr *a,
136 for (i = 0; i < n; i++) { 136 for (i = 0; i < n; i++) {
137 if (a->addr.a6[i] == b->addr.a6[i]) 137 if (a->addr.a6[i] == b->addr.a6[i])
138 continue; 138 continue;
139 if (a->addr.a6[i] < b->addr.a6[i]) 139 if ((__force u32)a->addr.a6[i] < (__force u32)b->addr.a6[i])
140 return -1; 140 return -1;
141 return 1; 141 return 1;
142 } 142 }
@@ -447,6 +447,7 @@ relookup:
447 p->rate_last = 0; 447 p->rate_last = 0;
448 p->pmtu_expires = 0; 448 p->pmtu_expires = 0;
449 p->pmtu_orig = 0; 449 p->pmtu_orig = 0;
450 p->redirect_genid = 0;
450 memset(&p->redirect_learned, 0, sizeof(p->redirect_learned)); 451 memset(&p->redirect_learned, 0, sizeof(p->redirect_learned));
451 452
452 453
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 7e4ec9fc2cef..6e412a60a91f 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -141,7 +141,7 @@ __be32 ic_servaddr = NONE; /* Boot server IP address */
141__be32 root_server_addr = NONE; /* Address of NFS server */ 141__be32 root_server_addr = NONE; /* Address of NFS server */
142u8 root_server_path[256] = { 0, }; /* Path to mount as root */ 142u8 root_server_path[256] = { 0, }; /* Path to mount as root */
143 143
144u32 ic_dev_xid; /* Device under configuration */ 144__be32 ic_dev_xid; /* Device under configuration */
145 145
146/* vendor class identifier */ 146/* vendor class identifier */
147static char vendor_class_identifier[253] __initdata; 147static char vendor_class_identifier[253] __initdata;
@@ -859,9 +859,9 @@ static int __init ic_bootp_string(char *dest, char *src, int len, int max)
859 */ 859 */
860static void __init ic_do_bootp_ext(u8 *ext) 860static void __init ic_do_bootp_ext(u8 *ext)
861{ 861{
862 u8 servers; 862 u8 servers;
863 int i; 863 int i;
864 u16 mtu; 864 __be16 mtu;
865 865
866#ifdef IPCONFIG_DEBUG 866#ifdef IPCONFIG_DEBUG
867 u8 *c; 867 u8 *c;
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
index 43d4c3b22369..aea5a199c37a 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -140,13 +140,14 @@ static void ping_v4_unhash(struct sock *sk)
140 write_lock_bh(&ping_table.lock); 140 write_lock_bh(&ping_table.lock);
141 hlist_nulls_del(&sk->sk_nulls_node); 141 hlist_nulls_del(&sk->sk_nulls_node);
142 sock_put(sk); 142 sock_put(sk);
143 isk->inet_num = isk->inet_sport = 0; 143 isk->inet_num = 0;
144 isk->inet_sport = 0;
144 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); 145 sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
145 write_unlock_bh(&ping_table.lock); 146 write_unlock_bh(&ping_table.lock);
146 } 147 }
147} 148}
148 149
149static struct sock *ping_v4_lookup(struct net *net, u32 saddr, u32 daddr, 150static struct sock *ping_v4_lookup(struct net *net, __be32 saddr, __be32 daddr,
150 u16 ident, int dif) 151 u16 ident, int dif)
151{ 152{
152 struct hlist_nulls_head *hslot = ping_hashslot(&ping_table, net, ident); 153 struct hlist_nulls_head *hslot = ping_hashslot(&ping_table, net, ident);
@@ -154,15 +155,15 @@ static struct sock *ping_v4_lookup(struct net *net, u32 saddr, u32 daddr,
154 struct inet_sock *isk; 155 struct inet_sock *isk;
155 struct hlist_nulls_node *hnode; 156 struct hlist_nulls_node *hnode;
156 157
157 pr_debug("try to find: num = %d, daddr = %ld, dif = %d\n", 158 pr_debug("try to find: num = %d, daddr = %pI4, dif = %d\n",
158 (int)ident, (unsigned long)daddr, dif); 159 (int)ident, &daddr, dif);
159 read_lock_bh(&ping_table.lock); 160 read_lock_bh(&ping_table.lock);
160 161
161 ping_portaddr_for_each_entry(sk, hnode, hslot) { 162 ping_portaddr_for_each_entry(sk, hnode, hslot) {
162 isk = inet_sk(sk); 163 isk = inet_sk(sk);
163 164
164 pr_debug("found: %p: num = %d, daddr = %ld, dif = %d\n", sk, 165 pr_debug("found: %p: num = %d, daddr = %pI4, dif = %d\n", sk,
165 (int)isk->inet_num, (unsigned long)isk->inet_rcv_saddr, 166 (int)isk->inet_num, &isk->inet_rcv_saddr,
166 sk->sk_bound_dev_if); 167 sk->sk_bound_dev_if);
167 168
168 pr_debug("iterate\n"); 169 pr_debug("iterate\n");
@@ -254,7 +255,7 @@ static int ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
254 sk, addr->sin_addr.s_addr, ntohs(addr->sin_port)); 255 sk, addr->sin_addr.s_addr, ntohs(addr->sin_port));
255 256
256 chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr); 257 chk_addr_ret = inet_addr_type(sock_net(sk), addr->sin_addr.s_addr);
257 if (addr->sin_addr.s_addr == INADDR_ANY) 258 if (addr->sin_addr.s_addr == htonl(INADDR_ANY))
258 chk_addr_ret = RTN_LOCAL; 259 chk_addr_ret = RTN_LOCAL;
259 260
260 if ((sysctl_ip_nonlocal_bind == 0 && 261 if ((sysctl_ip_nonlocal_bind == 0 &&
@@ -278,9 +279,9 @@ static int ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
278 goto out; 279 goto out;
279 } 280 }
280 281
281 pr_debug("after bind(): num = %d, daddr = %ld, dif = %d\n", 282 pr_debug("after bind(): num = %d, daddr = %pI4, dif = %d\n",
282 (int)isk->inet_num, 283 (int)isk->inet_num,
283 (unsigned long) isk->inet_rcv_saddr, 284 &isk->inet_rcv_saddr,
284 (int)sk->sk_bound_dev_if); 285 (int)sk->sk_bound_dev_if);
285 286
286 err = 0; 287 err = 0;
@@ -407,7 +408,7 @@ out:
407struct pingfakehdr { 408struct pingfakehdr {
408 struct icmphdr icmph; 409 struct icmphdr icmph;
409 struct iovec *iov; 410 struct iovec *iov;
410 u32 wcheck; 411 __wsum wcheck;
411}; 412};
412 413
413static int ping_getfrag(void *from, char * to, 414static int ping_getfrag(void *from, char * to,
@@ -459,7 +460,7 @@ static int ping_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
459 struct rtable *rt = NULL; 460 struct rtable *rt = NULL;
460 struct ip_options_data opt_copy; 461 struct ip_options_data opt_copy;
461 int free = 0; 462 int free = 0;
462 u32 saddr, daddr, faddr; 463 __be32 saddr, daddr, faddr;
463 u8 tos; 464 u8 tos;
464 int err; 465 int err;
465 466
@@ -696,8 +697,8 @@ void ping_rcv(struct sk_buff *skb)
696 struct net *net = dev_net(skb->dev); 697 struct net *net = dev_net(skb->dev);
697 struct iphdr *iph = ip_hdr(skb); 698 struct iphdr *iph = ip_hdr(skb);
698 struct icmphdr *icmph = icmp_hdr(skb); 699 struct icmphdr *icmph = icmp_hdr(skb);
699 u32 saddr = iph->saddr; 700 __be32 saddr = iph->saddr;
700 u32 daddr = iph->daddr; 701 __be32 daddr = iph->daddr;
701 702
702 /* We assume the packet has already been checked by icmp_rcv */ 703 /* We assume the packet has already been checked by icmp_rcv */
703 704
diff --git a/net/ipv4/udp_diag.c b/net/ipv4/udp_diag.c
index e5e18cb8a586..8a949f19deb6 100644
--- a/net/ipv4/udp_diag.c
+++ b/net/ipv4/udp_diag.c
@@ -15,7 +15,6 @@
15#include <linux/udp.h> 15#include <linux/udp.h>
16#include <net/udp.h> 16#include <net/udp.h>
17#include <net/udplite.h> 17#include <net/udplite.h>
18#include <linux/inet_diag.h>
19#include <linux/sock_diag.h> 18#include <linux/sock_diag.h>
20 19
21static int sk_diag_dump(struct sock *sk, struct sk_buff *skb, 20static int sk_diag_dump(struct sock *sk, struct sk_buff *skb,
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index ae08aee1773c..251e7cd75e89 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -575,7 +575,7 @@ int datagram_recv_ctl(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
575 } 575 }
576 if (np->rxopt.bits.rxorigdstaddr) { 576 if (np->rxopt.bits.rxorigdstaddr) {
577 struct sockaddr_in6 sin6; 577 struct sockaddr_in6 sin6;
578 u16 *ports = (u16 *) skb_transport_header(skb); 578 __be16 *ports = (__be16 *) skb_transport_header(skb);
579 579
580 if (skb_transport_offset(skb) + 4 <= skb->len) { 580 if (skb_transport_offset(skb) + 4 <= skb->len) {
581 /* All current transport protocols have the port numbers in the 581 /* All current transport protocols have the port numbers in the
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index fdeb6d03da81..da2e92d05c15 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -237,8 +237,8 @@ static int snmp6_dev_seq_show(struct seq_file *seq, void *v)
237 struct inet6_dev *idev = (struct inet6_dev *)seq->private; 237 struct inet6_dev *idev = (struct inet6_dev *)seq->private;
238 238
239 seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex); 239 seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex);
240 snmp6_seq_show_item(seq, (void __percpu **)idev->stats.ipv6, NULL, 240 snmp6_seq_show_item64(seq, (void __percpu **)idev->stats.ipv6,
241 snmp6_ipstats_list); 241 snmp6_ipstats_list, offsetof(struct ipstats_mib, syncp));
242 snmp6_seq_show_item(seq, NULL, idev->stats.icmpv6dev->mibs, 242 snmp6_seq_show_item(seq, NULL, idev->stats.icmpv6dev->mibs,
243 snmp6_icmp6_list); 243 snmp6_icmp6_list);
244 snmp6_seq_show_icmpv6msg(seq, idev->stats.icmpv6msgdev->mibs); 244 snmp6_seq_show_icmpv6msg(seq, idev->stats.icmpv6msgdev->mibs);
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 07361dfa8085..8c2e3ab58f2a 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1091,6 +1091,7 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev,
1091 else { 1091 else {
1092 neigh = ip6_neigh_lookup(&rt->dst, &fl6->daddr); 1092 neigh = ip6_neigh_lookup(&rt->dst, &fl6->daddr);
1093 if (IS_ERR(neigh)) { 1093 if (IS_ERR(neigh)) {
1094 in6_dev_put(idev);
1094 dst_free(&rt->dst); 1095 dst_free(&rt->dst);
1095 return ERR_CAST(neigh); 1096 return ERR_CAST(neigh);
1096 } 1097 }
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index e60df48fa4d4..296620d6ca0c 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -791,7 +791,7 @@ static int sta_apply_parameters(struct ieee80211_local *local,
791 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED)) 791 if (set & BIT(NL80211_STA_FLAG_AUTHORIZED))
792 ret = sta_info_move_state_checked(sta, 792 ret = sta_info_move_state_checked(sta,
793 IEEE80211_STA_AUTHORIZED); 793 IEEE80211_STA_AUTHORIZED);
794 else 794 else if (test_sta_flag(sta, WLAN_STA_AUTHORIZED))
795 ret = sta_info_move_state_checked(sta, 795 ret = sta_info_move_state_checked(sta,
796 IEEE80211_STA_ASSOC); 796 IEEE80211_STA_ASSOC);
797 if (ret) 797 if (ret)
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index f407427c642f..751409120769 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1979,6 +1979,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
1979 mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3, 1979 mesh_path_error_tx(ifmsh->mshcfg.element_ttl, fwd_hdr->addr3,
1980 0, reason, fwd_hdr->addr2, sdata); 1980 0, reason, fwd_hdr->addr2, sdata);
1981 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route); 1981 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route);
1982 kfree_skb(fwd_skb);
1982 return RX_DROP_MONITOR; 1983 return RX_DROP_MONITOR;
1983 } 1984 }
1984 1985
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 3c428d4839c7..ff11f6bf8266 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -238,9 +238,11 @@ static void sta_unblock(struct work_struct *wk)
238 if (sta->dead) 238 if (sta->dead)
239 return; 239 return;
240 240
241 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) 241 if (!test_sta_flag(sta, WLAN_STA_PS_STA)) {
242 local_bh_disable();
242 ieee80211_sta_ps_deliver_wakeup(sta); 243 ieee80211_sta_ps_deliver_wakeup(sta);
243 else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) { 244 local_bh_enable();
245 } else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) {
244 clear_sta_flag(sta, WLAN_STA_PS_DRIVER); 246 clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
245 247
246 local_bh_disable(); 248 local_bh_disable();
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index edcd1c7ab83f..e05667cd5e76 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1001,8 +1001,6 @@ ieee80211_tx_h_stats(struct ieee80211_tx_data *tx)
1001static ieee80211_tx_result debug_noinline 1001static ieee80211_tx_result debug_noinline
1002ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx) 1002ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx)
1003{ 1003{
1004 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
1005
1006 if (!tx->key) 1004 if (!tx->key)
1007 return TX_CONTINUE; 1005 return TX_CONTINUE;
1008 1006
@@ -1017,13 +1015,7 @@ ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx)
1017 case WLAN_CIPHER_SUITE_AES_CMAC: 1015 case WLAN_CIPHER_SUITE_AES_CMAC:
1018 return ieee80211_crypto_aes_cmac_encrypt(tx); 1016 return ieee80211_crypto_aes_cmac_encrypt(tx);
1019 default: 1017 default:
1020 /* handle hw-only algorithm */ 1018 return ieee80211_crypto_hw_encrypt(tx);
1021 if (info->control.hw_key) {
1022 ieee80211_tx_set_protected(tx);
1023 return TX_CONTINUE;
1024 }
1025 break;
1026
1027 } 1019 }
1028 1020
1029 return TX_DROP; 1021 return TX_DROP;
diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
index 422b79851ec5..b758350919ff 100644
--- a/net/mac80211/wpa.c
+++ b/net/mac80211/wpa.c
@@ -643,3 +643,22 @@ ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx)
643 643
644 return RX_CONTINUE; 644 return RX_CONTINUE;
645} 645}
646
647ieee80211_tx_result
648ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx)
649{
650 struct sk_buff *skb;
651 struct ieee80211_tx_info *info = NULL;
652
653 skb_queue_walk(&tx->skbs, skb) {
654 info = IEEE80211_SKB_CB(skb);
655
656 /* handle hw-only algorithm */
657 if (!info->control.hw_key)
658 return TX_DROP;
659 }
660
661 ieee80211_tx_set_protected(tx);
662
663 return TX_CONTINUE;
664}
diff --git a/net/mac80211/wpa.h b/net/mac80211/wpa.h
index baba0608313e..07e33f899c71 100644
--- a/net/mac80211/wpa.h
+++ b/net/mac80211/wpa.h
@@ -32,5 +32,7 @@ ieee80211_tx_result
32ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx); 32ieee80211_crypto_aes_cmac_encrypt(struct ieee80211_tx_data *tx);
33ieee80211_rx_result 33ieee80211_rx_result
34ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx); 34ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx);
35ieee80211_tx_result
36ieee80211_crypto_hw_encrypt(struct ieee80211_tx_data *tx);
35 37
36#endif /* WPA_H */ 38#endif /* WPA_H */
diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
index 86137b558f45..32dbf0fa89db 100644
--- a/net/netfilter/ipset/ip_set_core.c
+++ b/net/netfilter/ipset/ip_set_core.c
@@ -77,35 +77,42 @@ find_set_type(const char *name, u8 family, u8 revision)
77} 77}
78 78
79/* Unlock, try to load a set type module and lock again */ 79/* Unlock, try to load a set type module and lock again */
80static int 80static bool
81try_to_load_type(const char *name) 81load_settype(const char *name)
82{ 82{
83 nfnl_unlock(); 83 nfnl_unlock();
84 pr_debug("try to load ip_set_%s\n", name); 84 pr_debug("try to load ip_set_%s\n", name);
85 if (request_module("ip_set_%s", name) < 0) { 85 if (request_module("ip_set_%s", name) < 0) {
86 pr_warning("Can't find ip_set type %s\n", name); 86 pr_warning("Can't find ip_set type %s\n", name);
87 nfnl_lock(); 87 nfnl_lock();
88 return -IPSET_ERR_FIND_TYPE; 88 return false;
89 } 89 }
90 nfnl_lock(); 90 nfnl_lock();
91 return -EAGAIN; 91 return true;
92} 92}
93 93
94/* Find a set type and reference it */ 94/* Find a set type and reference it */
95#define find_set_type_get(name, family, revision, found) \
96 __find_set_type_get(name, family, revision, found, false)
97
95static int 98static int
96find_set_type_get(const char *name, u8 family, u8 revision, 99__find_set_type_get(const char *name, u8 family, u8 revision,
97 struct ip_set_type **found) 100 struct ip_set_type **found, bool retry)
98{ 101{
99 struct ip_set_type *type; 102 struct ip_set_type *type;
100 int err; 103 int err;
101 104
105 if (retry && !load_settype(name))
106 return -IPSET_ERR_FIND_TYPE;
107
102 rcu_read_lock(); 108 rcu_read_lock();
103 *found = find_set_type(name, family, revision); 109 *found = find_set_type(name, family, revision);
104 if (*found) { 110 if (*found) {
105 err = !try_module_get((*found)->me) ? -EFAULT : 0; 111 err = !try_module_get((*found)->me) ? -EFAULT : 0;
106 goto unlock; 112 goto unlock;
107 } 113 }
108 /* Make sure the type is loaded but we don't support the revision */ 114 /* Make sure the type is already loaded
115 * but we don't support the revision */
109 list_for_each_entry_rcu(type, &ip_set_type_list, list) 116 list_for_each_entry_rcu(type, &ip_set_type_list, list)
110 if (STREQ(type->name, name)) { 117 if (STREQ(type->name, name)) {
111 err = -IPSET_ERR_FIND_TYPE; 118 err = -IPSET_ERR_FIND_TYPE;
@@ -113,7 +120,8 @@ find_set_type_get(const char *name, u8 family, u8 revision,
113 } 120 }
114 rcu_read_unlock(); 121 rcu_read_unlock();
115 122
116 return try_to_load_type(name); 123 return retry ? -IPSET_ERR_FIND_TYPE :
124 __find_set_type_get(name, family, revision, found, true);
117 125
118unlock: 126unlock:
119 rcu_read_unlock(); 127 rcu_read_unlock();
@@ -124,12 +132,19 @@ unlock:
124 * If we succeeded, the supported minimal and maximum revisions are 132 * If we succeeded, the supported minimal and maximum revisions are
125 * filled out. 133 * filled out.
126 */ 134 */
135#define find_set_type_minmax(name, family, min, max) \
136 __find_set_type_minmax(name, family, min, max, false)
137
127static int 138static int
128find_set_type_minmax(const char *name, u8 family, u8 *min, u8 *max) 139__find_set_type_minmax(const char *name, u8 family, u8 *min, u8 *max,
140 bool retry)
129{ 141{
130 struct ip_set_type *type; 142 struct ip_set_type *type;
131 bool found = false; 143 bool found = false;
132 144
145 if (retry && !load_settype(name))
146 return -IPSET_ERR_FIND_TYPE;
147
133 *min = 255; *max = 0; 148 *min = 255; *max = 0;
134 rcu_read_lock(); 149 rcu_read_lock();
135 list_for_each_entry_rcu(type, &ip_set_type_list, list) 150 list_for_each_entry_rcu(type, &ip_set_type_list, list)
@@ -145,7 +160,8 @@ find_set_type_minmax(const char *name, u8 family, u8 *min, u8 *max)
145 if (found) 160 if (found)
146 return 0; 161 return 0;
147 162
148 return try_to_load_type(name); 163 return retry ? -IPSET_ERR_FIND_TYPE :
164 __find_set_type_minmax(name, family, min, max, true);
149} 165}
150 166
151#define family_name(f) ((f) == AF_INET ? "inet" : \ 167#define family_name(f) ((f) == AF_INET ? "inet" : \
@@ -1126,6 +1142,7 @@ release_refcount:
1126 if (ret || !cb->args[2]) { 1142 if (ret || !cb->args[2]) {
1127 pr_debug("release set %s\n", ip_set_list[index]->name); 1143 pr_debug("release set %s\n", ip_set_list[index]->name);
1128 ip_set_put_byindex(index); 1144 ip_set_put_byindex(index);
1145 cb->args[2] = 0;
1129 } 1146 }
1130out: 1147out:
1131 if (nlh) { 1148 if (nlh) {
diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c
index 299fec91f741..bbe23baa19b6 100644
--- a/net/netfilter/nf_conntrack_helper.c
+++ b/net/netfilter/nf_conntrack_helper.c
@@ -121,18 +121,6 @@ int __nf_ct_try_assign_helper(struct nf_conn *ct, struct nf_conn *tmpl,
121 int ret = 0; 121 int ret = 0;
122 122
123 if (tmpl != NULL) { 123 if (tmpl != NULL) {
124 /* we've got a userspace helper. */
125 if (tmpl->status & IPS_USERSPACE_HELPER) {
126 help = nf_ct_helper_ext_add(ct, flags);
127 if (help == NULL) {
128 ret = -ENOMEM;
129 goto out;
130 }
131 rcu_assign_pointer(help->helper, NULL);
132 __set_bit(IPS_USERSPACE_HELPER_BIT, &ct->status);
133 ret = 0;
134 goto out;
135 }
136 help = nfct_help(tmpl); 124 help = nfct_help(tmpl);
137 if (help != NULL) 125 if (help != NULL)
138 helper = help->helper; 126 helper = help->helper;
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
index 2a4834b83332..9307b033c0c9 100644
--- a/net/netfilter/nf_conntrack_netlink.c
+++ b/net/netfilter/nf_conntrack_netlink.c
@@ -2042,10 +2042,6 @@ ctnetlink_create_expect(struct net *net, u16 zone,
2042 } 2042 }
2043 help = nfct_help(ct); 2043 help = nfct_help(ct);
2044 if (!help) { 2044 if (!help) {
2045 err = -EOPNOTSUPP;
2046 goto out;
2047 }
2048 if (test_bit(IPS_USERSPACE_HELPER_BIT, &ct->status)) {
2049 if (!cda[CTA_EXPECT_TIMEOUT]) { 2045 if (!cda[CTA_EXPECT_TIMEOUT]) {
2050 err = -EINVAL; 2046 err = -EINVAL;
2051 goto out; 2047 goto out;
diff --git a/net/netfilter/xt_CT.c b/net/netfilter/xt_CT.c
index 8e87123f1373..0221d10de75a 100644
--- a/net/netfilter/xt_CT.c
+++ b/net/netfilter/xt_CT.c
@@ -62,8 +62,8 @@ static int xt_ct_tg_check(const struct xt_tgchk_param *par)
62 int ret = 0; 62 int ret = 0;
63 u8 proto; 63 u8 proto;
64 64
65 if (info->flags & ~(XT_CT_NOTRACK | XT_CT_USERSPACE_HELPER)) 65 if (info->flags & ~XT_CT_NOTRACK)
66 return -EOPNOTSUPP; 66 return -EINVAL;
67 67
68 if (info->flags & XT_CT_NOTRACK) { 68 if (info->flags & XT_CT_NOTRACK) {
69 ct = nf_ct_untracked_get(); 69 ct = nf_ct_untracked_get();
@@ -92,9 +92,7 @@ static int xt_ct_tg_check(const struct xt_tgchk_param *par)
92 GFP_KERNEL)) 92 GFP_KERNEL))
93 goto err3; 93 goto err3;
94 94
95 if (info->flags & XT_CT_USERSPACE_HELPER) { 95 if (info->helper[0]) {
96 __set_bit(IPS_USERSPACE_HELPER_BIT, &ct->status);
97 } else if (info->helper[0]) {
98 ret = -ENOENT; 96 ret = -ENOENT;
99 proto = xt_ct_find_proto(par); 97 proto = xt_ct_find_proto(par);
100 if (!proto) { 98 if (!proto) {
diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
index 8e4992101875..d95f9c963cde 100644
--- a/net/netfilter/xt_hashlimit.c
+++ b/net/netfilter/xt_hashlimit.c
@@ -445,7 +445,6 @@ hashlimit_init_dst(const struct xt_hashlimit_htable *hinfo,
445{ 445{
446 __be16 _ports[2], *ports; 446 __be16 _ports[2], *ports;
447 u8 nexthdr; 447 u8 nexthdr;
448 __be16 frag_off;
449 int poff; 448 int poff;
450 449
451 memset(dst, 0, sizeof(*dst)); 450 memset(dst, 0, sizeof(*dst));
@@ -466,6 +465,9 @@ hashlimit_init_dst(const struct xt_hashlimit_htable *hinfo,
466 break; 465 break;
467#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES) 466#if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
468 case NFPROTO_IPV6: 467 case NFPROTO_IPV6:
468 {
469 __be16 frag_off;
470
469 if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_DIP) { 471 if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_DIP) {
470 memcpy(&dst->ip6.dst, &ipv6_hdr(skb)->daddr, 472 memcpy(&dst->ip6.dst, &ipv6_hdr(skb)->daddr,
471 sizeof(dst->ip6.dst)); 473 sizeof(dst->ip6.dst));
@@ -485,6 +487,7 @@ hashlimit_init_dst(const struct xt_hashlimit_htable *hinfo,
485 if ((int)protoff < 0) 487 if ((int)protoff < 0)
486 return -1; 488 return -1;
487 break; 489 break;
490 }
488#endif 491#endif
489 default: 492 default:
490 BUG(); 493 BUG();
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 9a2725114e99..ce64c18b8c79 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2007-2011 Nicira Networks. 2 * Copyright (c) 2007-2012 Nicira Networks.
3 * 3 *
4 * This program is free software; you can redistribute it and/or 4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of version 2 of the GNU General Public 5 * modify it under the terms of version 2 of the GNU General Public
@@ -36,7 +36,6 @@
36#include <linux/rcupdate.h> 36#include <linux/rcupdate.h>
37#include <linux/tcp.h> 37#include <linux/tcp.h>
38#include <linux/udp.h> 38#include <linux/udp.h>
39#include <linux/version.h>
40#include <linux/ethtool.h> 39#include <linux/ethtool.h>
41#include <linux/wait.h> 40#include <linux/wait.h>
42#include <asm/system.h> 41#include <asm/system.h>
@@ -1397,9 +1396,8 @@ static int ovs_dp_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
1397 int i = 0; 1396 int i = 0;
1398 1397
1399 list_for_each_entry(dp, &dps, list_node) { 1398 list_for_each_entry(dp, &dps, list_node) {
1400 if (i < skip) 1399 if (i >= skip &&
1401 continue; 1400 ovs_dp_cmd_fill_info(dp, skb, NETLINK_CB(cb->skb).pid,
1402 if (ovs_dp_cmd_fill_info(dp, skb, NETLINK_CB(cb->skb).pid,
1403 cb->nlh->nlmsg_seq, NLM_F_MULTI, 1401 cb->nlh->nlmsg_seq, NLM_F_MULTI,
1404 OVS_DP_CMD_NEW) < 0) 1402 OVS_DP_CMD_NEW) < 0)
1405 break; 1403 break;
diff --git a/net/openvswitch/datapath.h b/net/openvswitch/datapath.h
index 5b9f884b7055..c73370cc1f02 100644
--- a/net/openvswitch/datapath.h
+++ b/net/openvswitch/datapath.h
@@ -25,7 +25,6 @@
25#include <linux/netdevice.h> 25#include <linux/netdevice.h>
26#include <linux/skbuff.h> 26#include <linux/skbuff.h>
27#include <linux/u64_stats_sync.h> 27#include <linux/u64_stats_sync.h>
28#include <linux/version.h>
29 28
30#include "flow.h" 29#include "flow.h"
31 30
diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c
index fe7f020a843e..1252c3081ef1 100644
--- a/net/openvswitch/flow.c
+++ b/net/openvswitch/flow.c
@@ -32,7 +32,6 @@
32#include <linux/in.h> 32#include <linux/in.h>
33#include <linux/rcupdate.h> 33#include <linux/rcupdate.h>
34#include <linux/if_arp.h> 34#include <linux/if_arp.h>
35#include <linux/if_ether.h>
36#include <linux/ip.h> 35#include <linux/ip.h>
37#include <linux/ipv6.h> 36#include <linux/ipv6.h>
38#include <linux/tcp.h> 37#include <linux/tcp.h>
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 8fc28b86f2b3..322b8d206693 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -23,7 +23,6 @@
23#include <linux/etherdevice.h> 23#include <linux/etherdevice.h>
24#include <linux/ethtool.h> 24#include <linux/ethtool.h>
25#include <linux/skbuff.h> 25#include <linux/skbuff.h>
26#include <linux/version.h>
27 26
28#include "datapath.h" 27#include "datapath.h"
29#include "vport-internal_dev.h" 28#include "vport-internal_dev.h"
diff --git a/net/openvswitch/vport.c b/net/openvswitch/vport.c
index 7f0ef3794c51..6c066ba25dc7 100644
--- a/net/openvswitch/vport.c
+++ b/net/openvswitch/vport.c
@@ -27,7 +27,6 @@
27#include <linux/rcupdate.h> 27#include <linux/rcupdate.h>
28#include <linux/rtnetlink.h> 28#include <linux/rtnetlink.h>
29#include <linux/compat.h> 29#include <linux/compat.h>
30#include <linux/version.h>
31 30
32#include "vport.h" 31#include "vport.h"
33#include "vport-internal_dev.h" 32#include "vport-internal_dev.h"