diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/core/drop_monitor.c | 1 | ||||
-rw-r--r-- | net/ipv4/esp4.c | 24 | ||||
-rw-r--r-- | net/ipv6/esp6.c | 18 | ||||
-rw-r--r-- | net/ipv6/ip6_output.c | 68 | ||||
-rw-r--r-- | net/l2tp/l2tp_ip.c | 24 | ||||
-rw-r--r-- | net/l2tp/l2tp_ip6.c | 18 | ||||
-rw-r--r-- | net/l2tp/l2tp_netlink.c | 3 | ||||
-rw-r--r-- | net/mac80211/mlme.c | 3 | ||||
-rw-r--r-- | net/mac80211/tx.c | 2 | ||||
-rw-r--r-- | net/mac80211/util.c | 12 | ||||
-rw-r--r-- | net/netlink/genetlink.c | 2 | ||||
-rw-r--r-- | net/rds/ib.h | 3 | ||||
-rw-r--r-- | net/wanrouter/Kconfig | 2 | ||||
-rw-r--r-- | net/xfrm/xfrm_policy.c | 3 |
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 | ||
469 | MODULE_LICENSE("GPL v2"); | 469 | MODULE_LICENSE("GPL v2"); |
470 | MODULE_AUTHOR("Neil Horman <nhorman@tuxdriver.com>"); | 470 | MODULE_AUTHOR("Neil Horman <nhorman@tuxdriver.com>"); |
471 | MODULE_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 | ||
486 | static void esp4_err(struct sk_buff *skb, u32 info) | 480 | static 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 | ||
431 | static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | 427 | static 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 | ||
1190 | static 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 | |||
1190 | int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to, | 1213 | int 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; | ||
1354 | alloc_new_skb: | 1380 | alloc_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 | |||
275 | out: | 284 | out: |
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 | ||
326 | static 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 | |||
314 | static int l2tp_ip_getname(struct socket *sock, struct sockaddr *uaddr, | 334 | static 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 | ||
394 | static 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 | |||
386 | static int l2tp_ip6_getname(struct socket *sock, struct sockaddr *uaddr, | 402 | static 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>"); | |||
923 | MODULE_DESCRIPTION("L2TP netlink"); | 923 | MODULE_DESCRIPTION("L2TP netlink"); |
924 | MODULE_LICENSE("GPL"); | 924 | MODULE_LICENSE("GPL"); |
925 | MODULE_VERSION("1.0"); | 925 | MODULE_VERSION("1.0"); |
926 | MODULE_ALIAS("net-pf-" __stringify(PF_NETLINK) "-proto-" \ | 926 | MODULE_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 | ||
5 | config WAN_ROUTER | 5 | config 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 | } |
1922 | ok: | 1922 | ok: |
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 | ||
1926 | nopol: | 1929 | nopol: |