aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-05-31 13:32:36 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-05-31 13:32:36 -0400
commit13199a0845729492fc51d1ba87938cdfe341b141 (patch)
tree544267bc4076fff6b2eaae119372b13f23aa8932 /net
parentaf56e0aa35f3ae2a4c1a6d1000702df1dd78cb76 (diff)
parent2e1d4a065a77d076a679df22a4eddbc7e33cad98 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking changes from David S. Miller: 1) Fix IPSEC header length calculation for transport mode in ESP. The issue is whether to do the calculation before or after alignment. Fix from Benjamin Poirier. 2) Fix regression in IPV6 IPSEC fragment length calculations, from Gao Feng. This is another transport vs tunnel mode issue. 3) Handle AF_UNSPEC connect()s properly in L2TP to avoid OOPSes. Fix from James Chapman. 4) Fix USB ASIX driver's reception of full sized VLAN packets, from Eric Dumazet. 5) Allow drop monitor (and, more generically, all generic netlink protocols) to be automatically loaded as a module. From Neil Horman. Fix up trivial conflict in Documentation/feature-removal-schedule.txt due to new entries added next to each other at the end. As usual. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (38 commits) net/smsc911x: Repair broken failure paths virtio-net: remove useless disable on freeze netdevice: Update netif_dbg for CONFIG_DYNAMIC_DEBUG drop_monitor: Add module alias to enable automatic module loading genetlink: Build a generic netlink family module alias net: add MODULE_ALIAS_NET_PF_PROTO_NAME r6040: Do a Proper deinit at errorpath and also when driver unloads (calling r6040_remove_one) r6040: disable pci device if the subsequent calls (after pci_enable_device) fails skb: avoid unnecessary reallocations in __skb_cow net: sh_eth: fix the rxdesc pointer when rx descriptor empty happens asix: allow full size 8021Q frames to be received rds_rdma: don't assume infiniband device is PCI l2tp: fix oops in L2TP IP sockets for connect() AF_UNSPEC case mac80211: fix ADDBA declined after suspend with wowlan wlcore: fix undefined symbols when CONFIG_PM is not defined mac80211: fix flag check for QoS NOACK frames ath9k_hw: apply internal regulator settings on AR933x ath9k_hw: update AR933x initvals to fix issues with high power devices ath9k: fix a use-after-free-bug when ath_tx_setup_buffer() fails ath9k: stop rx dma before stopping tx ...
Diffstat (limited to 'net')
-rw-r--r--net/core/drop_monitor.c1
-rw-r--r--net/ipv4/esp4.c24
-rw-r--r--net/ipv6/esp6.c18
-rw-r--r--net/ipv6/ip6_output.c68
-rw-r--r--net/l2tp/l2tp_ip.c24
-rw-r--r--net/l2tp/l2tp_ip6.c18
-rw-r--r--net/l2tp/l2tp_netlink.c3
-rw-r--r--net/mac80211/mlme.c3
-rw-r--r--net/mac80211/tx.c2
-rw-r--r--net/mac80211/util.c12
-rw-r--r--net/netlink/genetlink.c2
-rw-r--r--net/rds/ib.h3
-rw-r--r--net/wanrouter/Kconfig2
-rw-r--r--net/xfrm/xfrm_policy.c3
14 files changed, 122 insertions, 61 deletions
diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c
index 3252e7e0a005..ea5fb9fcc3f5 100644
--- a/net/core/drop_monitor.c
+++ b/net/core/drop_monitor.c
@@ -468,3 +468,4 @@ module_exit(exit_net_drop_monitor);
468 468
469MODULE_LICENSE("GPL v2"); 469MODULE_LICENSE("GPL v2");
470MODULE_AUTHOR("Neil Horman <nhorman@tuxdriver.com>"); 470MODULE_AUTHOR("Neil Horman <nhorman@tuxdriver.com>");
471MODULE_ALIAS_GENL_FAMILY("NET_DM");
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
index 89a47b35905d..cb982a61536f 100644
--- a/net/ipv4/esp4.c
+++ b/net/ipv4/esp4.c
@@ -459,28 +459,22 @@ static u32 esp4_get_mtu(struct xfrm_state *x, int mtu)
459 struct esp_data *esp = x->data; 459 struct esp_data *esp = x->data;
460 u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4); 460 u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4);
461 u32 align = max_t(u32, blksize, esp->padlen); 461 u32 align = max_t(u32, blksize, esp->padlen);
462 u32 rem; 462 unsigned int net_adj;
463
464 mtu -= x->props.header_len + crypto_aead_authsize(esp->aead);
465 rem = mtu & (align - 1);
466 mtu &= ~(align - 1);
467 463
468 switch (x->props.mode) { 464 switch (x->props.mode) {
469 case XFRM_MODE_TUNNEL:
470 break;
471 default:
472 case XFRM_MODE_TRANSPORT: 465 case XFRM_MODE_TRANSPORT:
473 /* The worst case */
474 mtu -= blksize - 4;
475 mtu += min_t(u32, blksize - 4, rem);
476 break;
477 case XFRM_MODE_BEET: 466 case XFRM_MODE_BEET:
478 /* The worst case. */ 467 net_adj = sizeof(struct iphdr);
479 mtu += min_t(u32, IPV4_BEET_PHMAXLEN, rem);
480 break; 468 break;
469 case XFRM_MODE_TUNNEL:
470 net_adj = 0;
471 break;
472 default:
473 BUG();
481 } 474 }
482 475
483 return mtu - 2; 476 return ((mtu - x->props.header_len - crypto_aead_authsize(esp->aead) -
477 net_adj) & ~(align - 1)) + (net_adj - 2);
484} 478}
485 479
486static void esp4_err(struct sk_buff *skb, u32 info) 480static void esp4_err(struct sk_buff *skb, u32 info)
diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c
index 1e62b7557b00..db1521fcda5b 100644
--- a/net/ipv6/esp6.c
+++ b/net/ipv6/esp6.c
@@ -413,19 +413,15 @@ static u32 esp6_get_mtu(struct xfrm_state *x, int mtu)
413 struct esp_data *esp = x->data; 413 struct esp_data *esp = x->data;
414 u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4); 414 u32 blksize = ALIGN(crypto_aead_blocksize(esp->aead), 4);
415 u32 align = max_t(u32, blksize, esp->padlen); 415 u32 align = max_t(u32, blksize, esp->padlen);
416 u32 rem; 416 unsigned int net_adj;
417 417
418 mtu -= x->props.header_len + crypto_aead_authsize(esp->aead); 418 if (x->props.mode != XFRM_MODE_TUNNEL)
419 rem = mtu & (align - 1); 419 net_adj = sizeof(struct ipv6hdr);
420 mtu &= ~(align - 1); 420 else
421 421 net_adj = 0;
422 if (x->props.mode != XFRM_MODE_TUNNEL) {
423 u32 padsize = ((blksize - 1) & 7) + 1;
424 mtu -= blksize - padsize;
425 mtu += min_t(u32, blksize - padsize, rem);
426 }
427 422
428 return mtu - 2; 423 return ((mtu - x->props.header_len - crypto_aead_authsize(esp->aead) -
424 net_adj) & ~(align - 1)) + (net_adj - 2);
429} 425}
430 426
431static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, 427static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index d99fdc699625..17b8c67998bb 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1187,6 +1187,29 @@ static inline struct ipv6_rt_hdr *ip6_rthdr_dup(struct ipv6_rt_hdr *src,
1187 return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL; 1187 return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
1188} 1188}
1189 1189
1190static void ip6_append_data_mtu(int *mtu,
1191 int *maxfraglen,
1192 unsigned int fragheaderlen,
1193 struct sk_buff *skb,
1194 struct rt6_info *rt)
1195{
1196 if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
1197 if (skb == NULL) {
1198 /* first fragment, reserve header_len */
1199 *mtu = *mtu - rt->dst.header_len;
1200
1201 } else {
1202 /*
1203 * this fragment is not first, the headers
1204 * space is regarded as data space.
1205 */
1206 *mtu = dst_mtu(rt->dst.path);
1207 }
1208 *maxfraglen = ((*mtu - fragheaderlen) & ~7)
1209 + fragheaderlen - sizeof(struct frag_hdr);
1210 }
1211}
1212
1190int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to, 1213int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1191 int offset, int len, int odd, struct sk_buff *skb), 1214 int offset, int len, int odd, struct sk_buff *skb),
1192 void *from, int length, int transhdrlen, 1215 void *from, int length, int transhdrlen,
@@ -1196,7 +1219,7 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1196 struct inet_sock *inet = inet_sk(sk); 1219 struct inet_sock *inet = inet_sk(sk);
1197 struct ipv6_pinfo *np = inet6_sk(sk); 1220 struct ipv6_pinfo *np = inet6_sk(sk);
1198 struct inet_cork *cork; 1221 struct inet_cork *cork;
1199 struct sk_buff *skb; 1222 struct sk_buff *skb, *skb_prev = NULL;
1200 unsigned int maxfraglen, fragheaderlen; 1223 unsigned int maxfraglen, fragheaderlen;
1201 int exthdrlen; 1224 int exthdrlen;
1202 int dst_exthdrlen; 1225 int dst_exthdrlen;
@@ -1253,8 +1276,12 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1253 inet->cork.fl.u.ip6 = *fl6; 1276 inet->cork.fl.u.ip6 = *fl6;
1254 np->cork.hop_limit = hlimit; 1277 np->cork.hop_limit = hlimit;
1255 np->cork.tclass = tclass; 1278 np->cork.tclass = tclass;
1256 mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ? 1279 if (rt->dst.flags & DST_XFRM_TUNNEL)
1257 rt->dst.dev->mtu : dst_mtu(&rt->dst); 1280 mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ?
1281 rt->dst.dev->mtu : dst_mtu(&rt->dst);
1282 else
1283 mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ?
1284 rt->dst.dev->mtu : dst_mtu(rt->dst.path);
1258 if (np->frag_size < mtu) { 1285 if (np->frag_size < mtu) {
1259 if (np->frag_size) 1286 if (np->frag_size)
1260 mtu = np->frag_size; 1287 mtu = np->frag_size;
@@ -1350,25 +1377,27 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
1350 unsigned int fraglen; 1377 unsigned int fraglen;
1351 unsigned int fraggap; 1378 unsigned int fraggap;
1352 unsigned int alloclen; 1379 unsigned int alloclen;
1353 struct sk_buff *skb_prev;
1354alloc_new_skb: 1380alloc_new_skb:
1355 skb_prev = skb;
1356
1357 /* There's no room in the current skb */ 1381 /* There's no room in the current skb */
1358 if (skb_prev) 1382 if (skb)
1359 fraggap = skb_prev->len - maxfraglen; 1383 fraggap = skb->len - maxfraglen;
1360 else 1384 else
1361 fraggap = 0; 1385 fraggap = 0;
1386 /* update mtu and maxfraglen if necessary */
1387 if (skb == NULL || skb_prev == NULL)
1388 ip6_append_data_mtu(&mtu, &maxfraglen,
1389 fragheaderlen, skb, rt);
1390
1391 skb_prev = skb;
1362 1392
1363 /* 1393 /*
1364 * If remaining data exceeds the mtu, 1394 * If remaining data exceeds the mtu,
1365 * we know we need more fragment(s). 1395 * we know we need more fragment(s).
1366 */ 1396 */
1367 datalen = length + fraggap; 1397 datalen = length + fraggap;
1368 if (datalen > (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen)
1369 datalen = maxfraglen - fragheaderlen;
1370 1398
1371 fraglen = datalen + fragheaderlen; 1399 if (datalen > (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen)
1400 datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len;
1372 if ((flags & MSG_MORE) && 1401 if ((flags & MSG_MORE) &&
1373 !(rt->dst.dev->features&NETIF_F_SG)) 1402 !(rt->dst.dev->features&NETIF_F_SG))
1374 alloclen = mtu; 1403 alloclen = mtu;
@@ -1377,13 +1406,16 @@ alloc_new_skb:
1377 1406
1378 alloclen += dst_exthdrlen; 1407 alloclen += dst_exthdrlen;
1379 1408
1380 /* 1409 if (datalen != length + fraggap) {
1381 * The last fragment gets additional space at tail. 1410 /*
1382 * Note: we overallocate on fragments with MSG_MODE 1411 * this is not the last fragment, the trailer
1383 * because we have no idea if we're the last one. 1412 * space is regarded as data space.
1384 */ 1413 */
1385 if (datalen == length + fraggap) 1414 datalen += rt->dst.trailer_len;
1386 alloclen += rt->dst.trailer_len; 1415 }
1416
1417 alloclen += rt->dst.trailer_len;
1418 fraglen = datalen + fragheaderlen;
1387 1419
1388 /* 1420 /*
1389 * We just reserve space for fragment header. 1421 * We just reserve space for fragment header.
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
index 889f5d13d7ba..70614e7affab 100644
--- a/net/l2tp/l2tp_ip.c
+++ b/net/l2tp/l2tp_ip.c
@@ -239,9 +239,16 @@ static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
239{ 239{
240 struct inet_sock *inet = inet_sk(sk); 240 struct inet_sock *inet = inet_sk(sk);
241 struct sockaddr_l2tpip *addr = (struct sockaddr_l2tpip *) uaddr; 241 struct sockaddr_l2tpip *addr = (struct sockaddr_l2tpip *) uaddr;
242 int ret = -EINVAL; 242 int ret;
243 int chk_addr_ret; 243 int chk_addr_ret;
244 244
245 if (!sock_flag(sk, SOCK_ZAPPED))
246 return -EINVAL;
247 if (addr_len < sizeof(struct sockaddr_l2tpip))
248 return -EINVAL;
249 if (addr->l2tp_family != AF_INET)
250 return -EINVAL;
251
245 ret = -EADDRINUSE; 252 ret = -EADDRINUSE;
246 read_lock_bh(&l2tp_ip_lock); 253 read_lock_bh(&l2tp_ip_lock);
247 if (__l2tp_ip_bind_lookup(&init_net, addr->l2tp_addr.s_addr, sk->sk_bound_dev_if, addr->l2tp_conn_id)) 254 if (__l2tp_ip_bind_lookup(&init_net, addr->l2tp_addr.s_addr, sk->sk_bound_dev_if, addr->l2tp_conn_id))
@@ -272,6 +279,8 @@ static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
272 sk_del_node_init(sk); 279 sk_del_node_init(sk);
273 write_unlock_bh(&l2tp_ip_lock); 280 write_unlock_bh(&l2tp_ip_lock);
274 ret = 0; 281 ret = 0;
282 sock_reset_flag(sk, SOCK_ZAPPED);
283
275out: 284out:
276 release_sock(sk); 285 release_sock(sk);
277 286
@@ -288,6 +297,9 @@ static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len
288 struct sockaddr_l2tpip *lsa = (struct sockaddr_l2tpip *) uaddr; 297 struct sockaddr_l2tpip *lsa = (struct sockaddr_l2tpip *) uaddr;
289 int rc; 298 int rc;
290 299
300 if (sock_flag(sk, SOCK_ZAPPED)) /* Must bind first - autobinding does not work */
301 return -EINVAL;
302
291 if (addr_len < sizeof(*lsa)) 303 if (addr_len < sizeof(*lsa))
292 return -EINVAL; 304 return -EINVAL;
293 305
@@ -311,6 +323,14 @@ static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len
311 return rc; 323 return rc;
312} 324}
313 325
326static int l2tp_ip_disconnect(struct sock *sk, int flags)
327{
328 if (sock_flag(sk, SOCK_ZAPPED))
329 return 0;
330
331 return udp_disconnect(sk, flags);
332}
333
314static int l2tp_ip_getname(struct socket *sock, struct sockaddr *uaddr, 334static int l2tp_ip_getname(struct socket *sock, struct sockaddr *uaddr,
315 int *uaddr_len, int peer) 335 int *uaddr_len, int peer)
316{ 336{
@@ -530,7 +550,7 @@ static struct proto l2tp_ip_prot = {
530 .close = l2tp_ip_close, 550 .close = l2tp_ip_close,
531 .bind = l2tp_ip_bind, 551 .bind = l2tp_ip_bind,
532 .connect = l2tp_ip_connect, 552 .connect = l2tp_ip_connect,
533 .disconnect = udp_disconnect, 553 .disconnect = l2tp_ip_disconnect,
534 .ioctl = udp_ioctl, 554 .ioctl = udp_ioctl,
535 .destroy = l2tp_ip_destroy_sock, 555 .destroy = l2tp_ip_destroy_sock,
536 .setsockopt = ip_setsockopt, 556 .setsockopt = ip_setsockopt,
diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
index 0291d8d85f30..35e1e4bde587 100644
--- a/net/l2tp/l2tp_ip6.c
+++ b/net/l2tp/l2tp_ip6.c
@@ -258,6 +258,10 @@ static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
258 int addr_type; 258 int addr_type;
259 int err; 259 int err;
260 260
261 if (!sock_flag(sk, SOCK_ZAPPED))
262 return -EINVAL;
263 if (addr->l2tp_family != AF_INET6)
264 return -EINVAL;
261 if (addr_len < sizeof(*addr)) 265 if (addr_len < sizeof(*addr))
262 return -EINVAL; 266 return -EINVAL;
263 267
@@ -331,6 +335,7 @@ static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
331 sk_del_node_init(sk); 335 sk_del_node_init(sk);
332 write_unlock_bh(&l2tp_ip6_lock); 336 write_unlock_bh(&l2tp_ip6_lock);
333 337
338 sock_reset_flag(sk, SOCK_ZAPPED);
334 release_sock(sk); 339 release_sock(sk);
335 return 0; 340 return 0;
336 341
@@ -354,6 +359,9 @@ static int l2tp_ip6_connect(struct sock *sk, struct sockaddr *uaddr,
354 int addr_type; 359 int addr_type;
355 int rc; 360 int rc;
356 361
362 if (sock_flag(sk, SOCK_ZAPPED)) /* Must bind first - autobinding does not work */
363 return -EINVAL;
364
357 if (addr_len < sizeof(*lsa)) 365 if (addr_len < sizeof(*lsa))
358 return -EINVAL; 366 return -EINVAL;
359 367
@@ -383,6 +391,14 @@ static int l2tp_ip6_connect(struct sock *sk, struct sockaddr *uaddr,
383 return rc; 391 return rc;
384} 392}
385 393
394static int l2tp_ip6_disconnect(struct sock *sk, int flags)
395{
396 if (sock_flag(sk, SOCK_ZAPPED))
397 return 0;
398
399 return udp_disconnect(sk, flags);
400}
401
386static int l2tp_ip6_getname(struct socket *sock, struct sockaddr *uaddr, 402static int l2tp_ip6_getname(struct socket *sock, struct sockaddr *uaddr,
387 int *uaddr_len, int peer) 403 int *uaddr_len, int peer)
388{ 404{
@@ -689,7 +705,7 @@ static struct proto l2tp_ip6_prot = {
689 .close = l2tp_ip6_close, 705 .close = l2tp_ip6_close,
690 .bind = l2tp_ip6_bind, 706 .bind = l2tp_ip6_bind,
691 .connect = l2tp_ip6_connect, 707 .connect = l2tp_ip6_connect,
692 .disconnect = udp_disconnect, 708 .disconnect = l2tp_ip6_disconnect,
693 .ioctl = udp_ioctl, 709 .ioctl = udp_ioctl,
694 .destroy = l2tp_ip6_destroy_sock, 710 .destroy = l2tp_ip6_destroy_sock,
695 .setsockopt = ipv6_setsockopt, 711 .setsockopt = ipv6_setsockopt,
diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
index 8577264378fe..ddc553e76671 100644
--- a/net/l2tp/l2tp_netlink.c
+++ b/net/l2tp/l2tp_netlink.c
@@ -923,5 +923,4 @@ MODULE_AUTHOR("James Chapman <jchapman@katalix.com>");
923MODULE_DESCRIPTION("L2TP netlink"); 923MODULE_DESCRIPTION("L2TP netlink");
924MODULE_LICENSE("GPL"); 924MODULE_LICENSE("GPL");
925MODULE_VERSION("1.0"); 925MODULE_VERSION("1.0");
926MODULE_ALIAS("net-pf-" __stringify(PF_NETLINK) "-proto-" \ 926MODULE_ALIAS_GENL_FAMILY("l2tp");
927 __stringify(NETLINK_GENERIC) "-type-" "l2tp");
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index b3b3c264ff66..04c306308987 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1522,6 +1522,8 @@ static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)
1522 * anymore. The timeout will be reset if the frame is ACKed by 1522 * anymore. The timeout will be reset if the frame is ACKed by
1523 * the AP. 1523 * the AP.
1524 */ 1524 */
1525 ifmgd->probe_send_count++;
1526
1525 if (sdata->local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) { 1527 if (sdata->local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) {
1526 ifmgd->nullfunc_failed = false; 1528 ifmgd->nullfunc_failed = false;
1527 ieee80211_send_nullfunc(sdata->local, sdata, 0); 1529 ieee80211_send_nullfunc(sdata->local, sdata, 0);
@@ -1538,7 +1540,6 @@ static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)
1538 0, (u32) -1, true, false); 1540 0, (u32) -1, true, false);
1539 } 1541 }
1540 1542
1541 ifmgd->probe_send_count++;
1542 ifmgd->probe_timeout = jiffies + msecs_to_jiffies(probe_wait_ms); 1543 ifmgd->probe_timeout = jiffies + msecs_to_jiffies(probe_wait_ms);
1543 run_again(ifmgd, ifmgd->probe_timeout); 1544 run_again(ifmgd, ifmgd->probe_timeout);
1544 if (sdata->local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) 1545 if (sdata->local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 5f827a6b0d8d..847215bb2a6f 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -153,7 +153,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
153 153
154 /* Don't calculate ACKs for QoS Frames with NoAck Policy set */ 154 /* Don't calculate ACKs for QoS Frames with NoAck Policy set */
155 if (ieee80211_is_data_qos(hdr->frame_control) && 155 if (ieee80211_is_data_qos(hdr->frame_control) &&
156 *(ieee80211_get_qos_ctl(hdr)) | IEEE80211_QOS_CTL_ACK_POLICY_NOACK) 156 *(ieee80211_get_qos_ctl(hdr)) & IEEE80211_QOS_CTL_ACK_POLICY_NOACK)
157 dur = 0; 157 dur = 0;
158 else 158 else
159 /* Time needed to transmit ACK 159 /* Time needed to transmit ACK
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 22f2216b397e..a44c6807df01 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1371,6 +1371,12 @@ int ieee80211_reconfig(struct ieee80211_local *local)
1371 } 1371 }
1372 } 1372 }
1373 1373
1374 /* add back keys */
1375 list_for_each_entry(sdata, &local->interfaces, list)
1376 if (ieee80211_sdata_running(sdata))
1377 ieee80211_enable_keys(sdata);
1378
1379 wake_up:
1374 /* 1380 /*
1375 * Clear the WLAN_STA_BLOCK_BA flag so new aggregation 1381 * Clear the WLAN_STA_BLOCK_BA flag so new aggregation
1376 * sessions can be established after a resume. 1382 * sessions can be established after a resume.
@@ -1392,12 +1398,6 @@ int ieee80211_reconfig(struct ieee80211_local *local)
1392 mutex_unlock(&local->sta_mtx); 1398 mutex_unlock(&local->sta_mtx);
1393 } 1399 }
1394 1400
1395 /* add back keys */
1396 list_for_each_entry(sdata, &local->interfaces, list)
1397 if (ieee80211_sdata_running(sdata))
1398 ieee80211_enable_keys(sdata);
1399
1400 wake_up:
1401 ieee80211_wake_queues_by_reason(hw, 1401 ieee80211_wake_queues_by_reason(hw,
1402 IEEE80211_QUEUE_STOP_REASON_SUSPEND); 1402 IEEE80211_QUEUE_STOP_REASON_SUSPEND);
1403 1403
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index 8340ace837f2..2cc7c1ee7690 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -836,7 +836,7 @@ static int ctrl_getfamily(struct sk_buff *skb, struct genl_info *info)
836#ifdef CONFIG_MODULES 836#ifdef CONFIG_MODULES
837 if (res == NULL) { 837 if (res == NULL) {
838 genl_unlock(); 838 genl_unlock();
839 request_module("net-pf-%d-proto-%d-type-%s", 839 request_module("net-pf-%d-proto-%d-family-%s",
840 PF_NETLINK, NETLINK_GENERIC, name); 840 PF_NETLINK, NETLINK_GENERIC, name);
841 genl_lock(); 841 genl_lock();
842 res = genl_family_find_byname(name); 842 res = genl_family_find_byname(name);
diff --git a/net/rds/ib.h b/net/rds/ib.h
index edfaaaf164eb..8d2b3d5a7c21 100644
--- a/net/rds/ib.h
+++ b/net/rds/ib.h
@@ -186,8 +186,7 @@ struct rds_ib_device {
186 struct work_struct free_work; 186 struct work_struct free_work;
187}; 187};
188 188
189#define pcidev_to_node(pcidev) pcibus_to_node(pcidev->bus) 189#define ibdev_to_node(ibdev) dev_to_node(ibdev->dma_device)
190#define ibdev_to_node(ibdev) pcidev_to_node(to_pci_dev(ibdev->dma_device))
191#define rdsibdev_to_node(rdsibdev) ibdev_to_node(rdsibdev->dev) 190#define rdsibdev_to_node(rdsibdev) ibdev_to_node(rdsibdev->dev)
192 191
193/* bits for i_ack_flags */ 192/* bits for i_ack_flags */
diff --git a/net/wanrouter/Kconfig b/net/wanrouter/Kconfig
index 61ceae0b9566..a157a2e64e18 100644
--- a/net/wanrouter/Kconfig
+++ b/net/wanrouter/Kconfig
@@ -3,7 +3,7 @@
3# 3#
4 4
5config WAN_ROUTER 5config WAN_ROUTER
6 tristate "WAN router" 6 tristate "WAN router (DEPRECATED)"
7 depends on EXPERIMENTAL 7 depends on EXPERIMENTAL
8 ---help--- 8 ---help---
9 Wide Area Networks (WANs), such as X.25, frame relay and leased 9 Wide Area Networks (WANs), such as X.25, frame relay and leased
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index c53e8f42aa75..ccfbd328a69d 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1921,6 +1921,9 @@ no_transform:
1921 } 1921 }
1922ok: 1922ok:
1923 xfrm_pols_put(pols, drop_pols); 1923 xfrm_pols_put(pols, drop_pols);
1924 if (dst && dst->xfrm &&
1925 dst->xfrm->props.mode == XFRM_MODE_TUNNEL)
1926 dst->flags |= DST_XFRM_TUNNEL;
1924 return dst; 1927 return dst;
1925 1928
1926nopol: 1929nopol: