diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/ipv4/route.c | 4 | ||||
| -rw-r--r-- | net/ipv4/tcp_output.c | 6 | ||||
| -rw-r--r-- | net/mac80211/debugfs_netdev.c | 24 | ||||
| -rw-r--r-- | net/mac80211/ieee80211_i.h | 6 | ||||
| -rw-r--r-- | net/mac80211/mesh.c | 2 | ||||
| -rw-r--r-- | net/mac80211/mlme.c | 52 | ||||
| -rw-r--r-- | net/rfkill/rfkill.c | 2 | ||||
| -rw-r--r-- | net/sched/sch_api.c | 18 | ||||
| -rw-r--r-- | net/sched/sch_cbq.c | 4 | ||||
| -rw-r--r-- | net/sched/sch_generic.c | 4 | ||||
| -rw-r--r-- | net/sched/sch_hfsc.c | 4 | ||||
| -rw-r--r-- | net/sched/sch_htb.c | 4 | ||||
| -rw-r--r-- | net/sctp/auth.c | 3 | ||||
| -rw-r--r-- | net/sctp/socket.c | 8 |
14 files changed, 66 insertions, 75 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index e91bafeb32f4..6ee5354c9aa1 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
| @@ -3121,9 +3121,9 @@ static struct ctl_table empty[1]; | |||
| 3121 | static struct ctl_table ipv4_skeleton[] = | 3121 | static struct ctl_table ipv4_skeleton[] = |
| 3122 | { | 3122 | { |
| 3123 | { .procname = "route", .ctl_name = NET_IPV4_ROUTE, | 3123 | { .procname = "route", .ctl_name = NET_IPV4_ROUTE, |
| 3124 | .child = ipv4_route_table}, | 3124 | .mode = 0555, .child = ipv4_route_table}, |
| 3125 | { .procname = "neigh", .ctl_name = NET_IPV4_NEIGH, | 3125 | { .procname = "neigh", .ctl_name = NET_IPV4_NEIGH, |
| 3126 | .child = empty}, | 3126 | .mode = 0555, .child = empty}, |
| 3127 | { } | 3127 | { } |
| 3128 | }; | 3128 | }; |
| 3129 | 3129 | ||
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index a00532de2a8c..8165f5aa8c71 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -468,7 +468,8 @@ static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb, | |||
| 468 | } | 468 | } |
| 469 | if (likely(sysctl_tcp_window_scaling)) { | 469 | if (likely(sysctl_tcp_window_scaling)) { |
| 470 | opts->ws = tp->rx_opt.rcv_wscale; | 470 | opts->ws = tp->rx_opt.rcv_wscale; |
| 471 | size += TCPOLEN_WSCALE_ALIGNED; | 471 | if(likely(opts->ws)) |
| 472 | size += TCPOLEN_WSCALE_ALIGNED; | ||
| 472 | } | 473 | } |
| 473 | if (likely(sysctl_tcp_sack)) { | 474 | if (likely(sysctl_tcp_sack)) { |
| 474 | opts->options |= OPTION_SACK_ADVERTISE; | 475 | opts->options |= OPTION_SACK_ADVERTISE; |
| @@ -509,7 +510,8 @@ static unsigned tcp_synack_options(struct sock *sk, | |||
| 509 | 510 | ||
| 510 | if (likely(ireq->wscale_ok)) { | 511 | if (likely(ireq->wscale_ok)) { |
| 511 | opts->ws = ireq->rcv_wscale; | 512 | opts->ws = ireq->rcv_wscale; |
| 512 | size += TCPOLEN_WSCALE_ALIGNED; | 513 | if(likely(opts->ws)) |
| 514 | size += TCPOLEN_WSCALE_ALIGNED; | ||
| 513 | } | 515 | } |
| 514 | if (likely(doing_ts)) { | 516 | if (likely(doing_ts)) { |
| 515 | opts->options |= OPTION_TS; | 517 | opts->options |= OPTION_TS; |
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c index 475f89a8aee1..8165df578c92 100644 --- a/net/mac80211/debugfs_netdev.c +++ b/net/mac80211/debugfs_netdev.c | |||
| @@ -248,8 +248,8 @@ IEEE80211_IF_WFILE(min_discovery_timeout, | |||
| 248 | static void add_sta_files(struct ieee80211_sub_if_data *sdata) | 248 | static void add_sta_files(struct ieee80211_sub_if_data *sdata) |
| 249 | { | 249 | { |
| 250 | DEBUGFS_ADD(drop_unencrypted, sta); | 250 | DEBUGFS_ADD(drop_unencrypted, sta); |
| 251 | DEBUGFS_ADD(force_unicast_rateidx, ap); | 251 | DEBUGFS_ADD(force_unicast_rateidx, sta); |
| 252 | DEBUGFS_ADD(max_ratectrl_rateidx, ap); | 252 | DEBUGFS_ADD(max_ratectrl_rateidx, sta); |
| 253 | 253 | ||
| 254 | DEBUGFS_ADD(state, sta); | 254 | DEBUGFS_ADD(state, sta); |
| 255 | DEBUGFS_ADD(bssid, sta); | 255 | DEBUGFS_ADD(bssid, sta); |
| @@ -283,8 +283,8 @@ static void add_ap_files(struct ieee80211_sub_if_data *sdata) | |||
| 283 | static void add_wds_files(struct ieee80211_sub_if_data *sdata) | 283 | static void add_wds_files(struct ieee80211_sub_if_data *sdata) |
| 284 | { | 284 | { |
| 285 | DEBUGFS_ADD(drop_unencrypted, wds); | 285 | DEBUGFS_ADD(drop_unencrypted, wds); |
| 286 | DEBUGFS_ADD(force_unicast_rateidx, ap); | 286 | DEBUGFS_ADD(force_unicast_rateidx, wds); |
| 287 | DEBUGFS_ADD(max_ratectrl_rateidx, ap); | 287 | DEBUGFS_ADD(max_ratectrl_rateidx, wds); |
| 288 | 288 | ||
| 289 | DEBUGFS_ADD(peer, wds); | 289 | DEBUGFS_ADD(peer, wds); |
| 290 | } | 290 | } |
| @@ -292,8 +292,8 @@ static void add_wds_files(struct ieee80211_sub_if_data *sdata) | |||
| 292 | static void add_vlan_files(struct ieee80211_sub_if_data *sdata) | 292 | static void add_vlan_files(struct ieee80211_sub_if_data *sdata) |
| 293 | { | 293 | { |
| 294 | DEBUGFS_ADD(drop_unencrypted, vlan); | 294 | DEBUGFS_ADD(drop_unencrypted, vlan); |
| 295 | DEBUGFS_ADD(force_unicast_rateidx, ap); | 295 | DEBUGFS_ADD(force_unicast_rateidx, vlan); |
| 296 | DEBUGFS_ADD(max_ratectrl_rateidx, ap); | 296 | DEBUGFS_ADD(max_ratectrl_rateidx, vlan); |
| 297 | } | 297 | } |
| 298 | 298 | ||
| 299 | static void add_monitor_files(struct ieee80211_sub_if_data *sdata) | 299 | static void add_monitor_files(struct ieee80211_sub_if_data *sdata) |
| @@ -381,8 +381,8 @@ static void add_files(struct ieee80211_sub_if_data *sdata) | |||
| 381 | static void del_sta_files(struct ieee80211_sub_if_data *sdata) | 381 | static void del_sta_files(struct ieee80211_sub_if_data *sdata) |
| 382 | { | 382 | { |
| 383 | DEBUGFS_DEL(drop_unencrypted, sta); | 383 | DEBUGFS_DEL(drop_unencrypted, sta); |
| 384 | DEBUGFS_DEL(force_unicast_rateidx, ap); | 384 | DEBUGFS_DEL(force_unicast_rateidx, sta); |
| 385 | DEBUGFS_DEL(max_ratectrl_rateidx, ap); | 385 | DEBUGFS_DEL(max_ratectrl_rateidx, sta); |
| 386 | 386 | ||
| 387 | DEBUGFS_DEL(state, sta); | 387 | DEBUGFS_DEL(state, sta); |
| 388 | DEBUGFS_DEL(bssid, sta); | 388 | DEBUGFS_DEL(bssid, sta); |
| @@ -416,8 +416,8 @@ static void del_ap_files(struct ieee80211_sub_if_data *sdata) | |||
| 416 | static void del_wds_files(struct ieee80211_sub_if_data *sdata) | 416 | static void del_wds_files(struct ieee80211_sub_if_data *sdata) |
| 417 | { | 417 | { |
| 418 | DEBUGFS_DEL(drop_unencrypted, wds); | 418 | DEBUGFS_DEL(drop_unencrypted, wds); |
| 419 | DEBUGFS_DEL(force_unicast_rateidx, ap); | 419 | DEBUGFS_DEL(force_unicast_rateidx, wds); |
| 420 | DEBUGFS_DEL(max_ratectrl_rateidx, ap); | 420 | DEBUGFS_DEL(max_ratectrl_rateidx, wds); |
| 421 | 421 | ||
| 422 | DEBUGFS_DEL(peer, wds); | 422 | DEBUGFS_DEL(peer, wds); |
| 423 | } | 423 | } |
| @@ -425,8 +425,8 @@ static void del_wds_files(struct ieee80211_sub_if_data *sdata) | |||
| 425 | static void del_vlan_files(struct ieee80211_sub_if_data *sdata) | 425 | static void del_vlan_files(struct ieee80211_sub_if_data *sdata) |
| 426 | { | 426 | { |
| 427 | DEBUGFS_DEL(drop_unencrypted, vlan); | 427 | DEBUGFS_DEL(drop_unencrypted, vlan); |
| 428 | DEBUGFS_DEL(force_unicast_rateidx, ap); | 428 | DEBUGFS_DEL(force_unicast_rateidx, vlan); |
| 429 | DEBUGFS_DEL(max_ratectrl_rateidx, ap); | 429 | DEBUGFS_DEL(max_ratectrl_rateidx, vlan); |
| 430 | } | 430 | } |
| 431 | 431 | ||
| 432 | static void del_monitor_files(struct ieee80211_sub_if_data *sdata) | 432 | static void del_monitor_files(struct ieee80211_sub_if_data *sdata) |
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index ec59345af65b..586a9b49b0fc 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
| @@ -470,6 +470,8 @@ struct ieee80211_sub_if_data { | |||
| 470 | struct dentry *auth_transaction; | 470 | struct dentry *auth_transaction; |
| 471 | struct dentry *flags; | 471 | struct dentry *flags; |
| 472 | struct dentry *num_beacons_sta; | 472 | struct dentry *num_beacons_sta; |
| 473 | struct dentry *force_unicast_rateidx; | ||
| 474 | struct dentry *max_ratectrl_rateidx; | ||
| 473 | } sta; | 475 | } sta; |
| 474 | struct { | 476 | struct { |
| 475 | struct dentry *drop_unencrypted; | 477 | struct dentry *drop_unencrypted; |
| @@ -483,9 +485,13 @@ struct ieee80211_sub_if_data { | |||
| 483 | struct { | 485 | struct { |
| 484 | struct dentry *drop_unencrypted; | 486 | struct dentry *drop_unencrypted; |
| 485 | struct dentry *peer; | 487 | struct dentry *peer; |
| 488 | struct dentry *force_unicast_rateidx; | ||
| 489 | struct dentry *max_ratectrl_rateidx; | ||
| 486 | } wds; | 490 | } wds; |
| 487 | struct { | 491 | struct { |
| 488 | struct dentry *drop_unencrypted; | 492 | struct dentry *drop_unencrypted; |
| 493 | struct dentry *force_unicast_rateidx; | ||
| 494 | struct dentry *max_ratectrl_rateidx; | ||
| 489 | } vlan; | 495 | } vlan; |
| 490 | struct { | 496 | struct { |
| 491 | struct dentry *mode; | 497 | struct dentry *mode; |
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index b5933b271491..35f2f95f2fa7 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c | |||
| @@ -383,7 +383,7 @@ errcopy: | |||
| 383 | hlist_for_each_safe(p, q, &newtbl->hash_buckets[i]) | 383 | hlist_for_each_safe(p, q, &newtbl->hash_buckets[i]) |
| 384 | tbl->free_node(p, 0); | 384 | tbl->free_node(p, 0); |
| 385 | } | 385 | } |
| 386 | __mesh_table_free(tbl); | 386 | __mesh_table_free(newtbl); |
| 387 | endgrow: | 387 | endgrow: |
| 388 | return NULL; | 388 | return NULL; |
| 389 | } | 389 | } |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 1e97fb9fb34b..9bb68c6a8f44 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
| @@ -478,51 +478,21 @@ int ieee80211_ht_addt_info_ie_to_ht_bss_info( | |||
| 478 | static void ieee80211_sta_send_associnfo(struct net_device *dev, | 478 | static void ieee80211_sta_send_associnfo(struct net_device *dev, |
| 479 | struct ieee80211_if_sta *ifsta) | 479 | struct ieee80211_if_sta *ifsta) |
| 480 | { | 480 | { |
| 481 | char *buf; | ||
| 482 | size_t len; | ||
| 483 | int i; | ||
| 484 | union iwreq_data wrqu; | 481 | union iwreq_data wrqu; |
| 485 | 482 | ||
| 486 | if (!ifsta->assocreq_ies && !ifsta->assocresp_ies) | ||
| 487 | return; | ||
| 488 | |||
| 489 | buf = kmalloc(50 + 2 * (ifsta->assocreq_ies_len + | ||
| 490 | ifsta->assocresp_ies_len), GFP_KERNEL); | ||
| 491 | if (!buf) | ||
| 492 | return; | ||
| 493 | |||
| 494 | len = sprintf(buf, "ASSOCINFO("); | ||
| 495 | if (ifsta->assocreq_ies) { | 483 | if (ifsta->assocreq_ies) { |
| 496 | len += sprintf(buf + len, "ReqIEs="); | 484 | memset(&wrqu, 0, sizeof(wrqu)); |
| 497 | for (i = 0; i < ifsta->assocreq_ies_len; i++) { | 485 | wrqu.data.length = ifsta->assocreq_ies_len; |
| 498 | len += sprintf(buf + len, "%02x", | 486 | wireless_send_event(dev, IWEVASSOCREQIE, &wrqu, |
| 499 | ifsta->assocreq_ies[i]); | 487 | ifsta->assocreq_ies); |
| 500 | } | ||
| 501 | } | 488 | } |
| 502 | if (ifsta->assocresp_ies) { | ||
| 503 | if (ifsta->assocreq_ies) | ||
| 504 | len += sprintf(buf + len, " "); | ||
| 505 | len += sprintf(buf + len, "RespIEs="); | ||
| 506 | for (i = 0; i < ifsta->assocresp_ies_len; i++) { | ||
| 507 | len += sprintf(buf + len, "%02x", | ||
| 508 | ifsta->assocresp_ies[i]); | ||
| 509 | } | ||
| 510 | } | ||
| 511 | len += sprintf(buf + len, ")"); | ||
| 512 | 489 | ||
| 513 | if (len > IW_CUSTOM_MAX) { | 490 | if (ifsta->assocresp_ies) { |
| 514 | len = sprintf(buf, "ASSOCRESPIE="); | 491 | memset(&wrqu, 0, sizeof(wrqu)); |
| 515 | for (i = 0; i < ifsta->assocresp_ies_len; i++) { | 492 | wrqu.data.length = ifsta->assocresp_ies_len; |
| 516 | len += sprintf(buf + len, "%02x", | 493 | wireless_send_event(dev, IWEVASSOCRESPIE, &wrqu, |
| 517 | ifsta->assocresp_ies[i]); | 494 | ifsta->assocresp_ies); |
| 518 | } | ||
| 519 | } | 495 | } |
| 520 | |||
| 521 | memset(&wrqu, 0, sizeof(wrqu)); | ||
| 522 | wrqu.data.length = len; | ||
| 523 | wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf); | ||
| 524 | |||
| 525 | kfree(buf); | ||
| 526 | } | 496 | } |
| 527 | 497 | ||
| 528 | 498 | ||
| @@ -813,7 +783,7 @@ static void ieee80211_send_assoc(struct net_device *dev, | |||
| 813 | } | 783 | } |
| 814 | } | 784 | } |
| 815 | 785 | ||
| 816 | if (count == 8) { | 786 | if (rates_len > count) { |
| 817 | pos = skb_put(skb, rates_len - count + 2); | 787 | pos = skb_put(skb, rates_len - count + 2); |
| 818 | *pos++ = WLAN_EID_EXT_SUPP_RATES; | 788 | *pos++ = WLAN_EID_EXT_SUPP_RATES; |
| 819 | *pos++ = rates_len - count; | 789 | *pos++ = rates_len - count; |
| @@ -2868,7 +2838,7 @@ static void ieee80211_rx_bss_info(struct net_device *dev, | |||
| 2868 | jiffies); | 2838 | jiffies); |
| 2869 | #endif /* CONFIG_MAC80211_IBSS_DEBUG */ | 2839 | #endif /* CONFIG_MAC80211_IBSS_DEBUG */ |
| 2870 | if (beacon_timestamp > rx_timestamp) { | 2840 | if (beacon_timestamp > rx_timestamp) { |
| 2871 | #ifndef CONFIG_MAC80211_IBSS_DEBUG | 2841 | #ifdef CONFIG_MAC80211_IBSS_DEBUG |
| 2872 | printk(KERN_DEBUG "%s: beacon TSF higher than " | 2842 | printk(KERN_DEBUG "%s: beacon TSF higher than " |
| 2873 | "local TSF - IBSS merge with BSSID %s\n", | 2843 | "local TSF - IBSS merge with BSSID %s\n", |
| 2874 | dev->name, print_mac(mac, mgmt->bssid)); | 2844 | dev->name, print_mac(mac, mgmt->bssid)); |
diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c index 35a9994e2339..74aecc098bad 100644 --- a/net/rfkill/rfkill.c +++ b/net/rfkill/rfkill.c | |||
| @@ -377,7 +377,7 @@ static ssize_t rfkill_claim_show(struct device *dev, | |||
| 377 | { | 377 | { |
| 378 | struct rfkill *rfkill = to_rfkill(dev); | 378 | struct rfkill *rfkill = to_rfkill(dev); |
| 379 | 379 | ||
| 380 | return sprintf(buf, "%d", rfkill->user_claim); | 380 | return sprintf(buf, "%d\n", rfkill->user_claim); |
| 381 | } | 381 | } |
| 382 | 382 | ||
| 383 | static ssize_t rfkill_claim_store(struct device *dev, | 383 | static ssize_t rfkill_claim_store(struct device *dev, |
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index e7fb9e0d21b4..506b709510b6 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
| @@ -624,7 +624,7 @@ static struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue, | |||
| 624 | struct Qdisc *oqdisc = dev_queue->qdisc_sleeping; | 624 | struct Qdisc *oqdisc = dev_queue->qdisc_sleeping; |
| 625 | spinlock_t *root_lock; | 625 | spinlock_t *root_lock; |
| 626 | 626 | ||
| 627 | root_lock = qdisc_root_lock(oqdisc); | 627 | root_lock = qdisc_lock(oqdisc); |
| 628 | spin_lock_bh(root_lock); | 628 | spin_lock_bh(root_lock); |
| 629 | 629 | ||
| 630 | /* Prune old scheduler */ | 630 | /* Prune old scheduler */ |
| @@ -635,7 +635,7 @@ static struct Qdisc *dev_graft_qdisc(struct netdev_queue *dev_queue, | |||
| 635 | if (qdisc == NULL) | 635 | if (qdisc == NULL) |
| 636 | qdisc = &noop_qdisc; | 636 | qdisc = &noop_qdisc; |
| 637 | dev_queue->qdisc_sleeping = qdisc; | 637 | dev_queue->qdisc_sleeping = qdisc; |
| 638 | dev_queue->qdisc = &noop_qdisc; | 638 | rcu_assign_pointer(dev_queue->qdisc, &noop_qdisc); |
| 639 | 639 | ||
| 640 | spin_unlock_bh(root_lock); | 640 | spin_unlock_bh(root_lock); |
| 641 | 641 | ||
| @@ -830,9 +830,16 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue, | |||
| 830 | sch->stab = stab; | 830 | sch->stab = stab; |
| 831 | } | 831 | } |
| 832 | if (tca[TCA_RATE]) { | 832 | if (tca[TCA_RATE]) { |
| 833 | spinlock_t *root_lock; | ||
| 834 | |||
| 835 | if ((sch->parent != TC_H_ROOT) && | ||
| 836 | !(sch->flags & TCQ_F_INGRESS)) | ||
| 837 | root_lock = qdisc_root_sleeping_lock(sch); | ||
| 838 | else | ||
| 839 | root_lock = qdisc_lock(sch); | ||
| 840 | |||
| 833 | err = gen_new_estimator(&sch->bstats, &sch->rate_est, | 841 | err = gen_new_estimator(&sch->bstats, &sch->rate_est, |
| 834 | qdisc_root_lock(sch), | 842 | root_lock, tca[TCA_RATE]); |
| 835 | tca[TCA_RATE]); | ||
| 836 | if (err) { | 843 | if (err) { |
| 837 | /* | 844 | /* |
| 838 | * Any broken qdiscs that would require | 845 | * Any broken qdiscs that would require |
| @@ -884,7 +891,8 @@ static int qdisc_change(struct Qdisc *sch, struct nlattr **tca) | |||
| 884 | 891 | ||
| 885 | if (tca[TCA_RATE]) | 892 | if (tca[TCA_RATE]) |
| 886 | gen_replace_estimator(&sch->bstats, &sch->rate_est, | 893 | gen_replace_estimator(&sch->bstats, &sch->rate_est, |
| 887 | qdisc_root_lock(sch), tca[TCA_RATE]); | 894 | qdisc_root_sleeping_lock(sch), |
| 895 | tca[TCA_RATE]); | ||
| 888 | return 0; | 896 | return 0; |
| 889 | } | 897 | } |
| 890 | 898 | ||
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index 8fa90d68ec6d..9b720adedead 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c | |||
| @@ -1839,7 +1839,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t | |||
| 1839 | 1839 | ||
| 1840 | if (tca[TCA_RATE]) | 1840 | if (tca[TCA_RATE]) |
| 1841 | gen_replace_estimator(&cl->bstats, &cl->rate_est, | 1841 | gen_replace_estimator(&cl->bstats, &cl->rate_est, |
| 1842 | qdisc_root_lock(sch), | 1842 | qdisc_root_sleeping_lock(sch), |
| 1843 | tca[TCA_RATE]); | 1843 | tca[TCA_RATE]); |
| 1844 | return 0; | 1844 | return 0; |
| 1845 | } | 1845 | } |
| @@ -1930,7 +1930,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t | |||
| 1930 | 1930 | ||
| 1931 | if (tca[TCA_RATE]) | 1931 | if (tca[TCA_RATE]) |
| 1932 | gen_new_estimator(&cl->bstats, &cl->rate_est, | 1932 | gen_new_estimator(&cl->bstats, &cl->rate_est, |
| 1933 | qdisc_root_lock(sch), tca[TCA_RATE]); | 1933 | qdisc_root_sleeping_lock(sch), tca[TCA_RATE]); |
| 1934 | 1934 | ||
| 1935 | *arg = (unsigned long)cl; | 1935 | *arg = (unsigned long)cl; |
| 1936 | return 0; | 1936 | return 0; |
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 5f0ade7806a7..9634091ee2f0 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
| @@ -634,7 +634,7 @@ static void dev_deactivate_queue(struct net_device *dev, | |||
| 634 | if (!(qdisc->flags & TCQ_F_BUILTIN)) | 634 | if (!(qdisc->flags & TCQ_F_BUILTIN)) |
| 635 | set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state); | 635 | set_bit(__QDISC_STATE_DEACTIVATED, &qdisc->state); |
| 636 | 636 | ||
| 637 | dev_queue->qdisc = qdisc_default; | 637 | rcu_assign_pointer(dev_queue->qdisc, qdisc_default); |
| 638 | qdisc_reset(qdisc); | 638 | qdisc_reset(qdisc); |
| 639 | 639 | ||
| 640 | spin_unlock_bh(qdisc_lock(qdisc)); | 640 | spin_unlock_bh(qdisc_lock(qdisc)); |
| @@ -709,7 +709,7 @@ static void shutdown_scheduler_queue(struct net_device *dev, | |||
| 709 | struct Qdisc *qdisc_default = _qdisc_default; | 709 | struct Qdisc *qdisc_default = _qdisc_default; |
| 710 | 710 | ||
| 711 | if (qdisc) { | 711 | if (qdisc) { |
| 712 | dev_queue->qdisc = qdisc_default; | 712 | rcu_assign_pointer(dev_queue->qdisc, qdisc_default); |
| 713 | dev_queue->qdisc_sleeping = qdisc_default; | 713 | dev_queue->qdisc_sleeping = qdisc_default; |
| 714 | 714 | ||
| 715 | qdisc_destroy(qdisc); | 715 | qdisc_destroy(qdisc); |
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index c2b8d9cce3d2..c1e77da8cd09 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c | |||
| @@ -1045,7 +1045,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
| 1045 | 1045 | ||
| 1046 | if (tca[TCA_RATE]) | 1046 | if (tca[TCA_RATE]) |
| 1047 | gen_replace_estimator(&cl->bstats, &cl->rate_est, | 1047 | gen_replace_estimator(&cl->bstats, &cl->rate_est, |
| 1048 | qdisc_root_lock(sch), | 1048 | qdisc_root_sleeping_lock(sch), |
| 1049 | tca[TCA_RATE]); | 1049 | tca[TCA_RATE]); |
| 1050 | return 0; | 1050 | return 0; |
| 1051 | } | 1051 | } |
| @@ -1104,7 +1104,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
| 1104 | 1104 | ||
| 1105 | if (tca[TCA_RATE]) | 1105 | if (tca[TCA_RATE]) |
| 1106 | gen_new_estimator(&cl->bstats, &cl->rate_est, | 1106 | gen_new_estimator(&cl->bstats, &cl->rate_est, |
| 1107 | qdisc_root_lock(sch), tca[TCA_RATE]); | 1107 | qdisc_root_sleeping_lock(sch), tca[TCA_RATE]); |
| 1108 | *arg = (unsigned long)cl; | 1108 | *arg = (unsigned long)cl; |
| 1109 | return 0; | 1109 | return 0; |
| 1110 | } | 1110 | } |
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 0df0df202ed0..97d4761cc31e 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
| @@ -1372,7 +1372,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, | |||
| 1372 | goto failure; | 1372 | goto failure; |
| 1373 | 1373 | ||
| 1374 | gen_new_estimator(&cl->bstats, &cl->rate_est, | 1374 | gen_new_estimator(&cl->bstats, &cl->rate_est, |
| 1375 | qdisc_root_lock(sch), | 1375 | qdisc_root_sleeping_lock(sch), |
| 1376 | tca[TCA_RATE] ? : &est.nla); | 1376 | tca[TCA_RATE] ? : &est.nla); |
| 1377 | cl->refcnt = 1; | 1377 | cl->refcnt = 1; |
| 1378 | cl->children = 0; | 1378 | cl->children = 0; |
| @@ -1427,7 +1427,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, | |||
| 1427 | } else { | 1427 | } else { |
| 1428 | if (tca[TCA_RATE]) | 1428 | if (tca[TCA_RATE]) |
| 1429 | gen_replace_estimator(&cl->bstats, &cl->rate_est, | 1429 | gen_replace_estimator(&cl->bstats, &cl->rate_est, |
| 1430 | qdisc_root_lock(sch), | 1430 | qdisc_root_sleeping_lock(sch), |
| 1431 | tca[TCA_RATE]); | 1431 | tca[TCA_RATE]); |
| 1432 | sch_tree_lock(sch); | 1432 | sch_tree_lock(sch); |
| 1433 | } | 1433 | } |
diff --git a/net/sctp/auth.c b/net/sctp/auth.c index 1fcb4cf2f4c9..52db5f60daa0 100644 --- a/net/sctp/auth.c +++ b/net/sctp/auth.c | |||
| @@ -786,6 +786,9 @@ int sctp_auth_ep_set_hmacs(struct sctp_endpoint *ep, | |||
| 786 | for (i = 0; i < hmacs->shmac_num_idents; i++) { | 786 | for (i = 0; i < hmacs->shmac_num_idents; i++) { |
| 787 | id = hmacs->shmac_idents[i]; | 787 | id = hmacs->shmac_idents[i]; |
| 788 | 788 | ||
| 789 | if (id > SCTP_AUTH_HMAC_ID_MAX) | ||
| 790 | return -EOPNOTSUPP; | ||
| 791 | |||
| 789 | if (SCTP_AUTH_HMAC_ID_SHA1 == id) | 792 | if (SCTP_AUTH_HMAC_ID_SHA1 == id) |
| 790 | has_sha1 = 1; | 793 | has_sha1 = 1; |
| 791 | 794 | ||
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index afa952e726d7..5ffb9dec1c3f 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
| @@ -3086,6 +3086,7 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk, | |||
| 3086 | int optlen) | 3086 | int optlen) |
| 3087 | { | 3087 | { |
| 3088 | struct sctp_hmacalgo *hmacs; | 3088 | struct sctp_hmacalgo *hmacs; |
| 3089 | u32 idents; | ||
| 3089 | int err; | 3090 | int err; |
| 3090 | 3091 | ||
| 3091 | if (!sctp_auth_enable) | 3092 | if (!sctp_auth_enable) |
| @@ -3103,8 +3104,9 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk, | |||
| 3103 | goto out; | 3104 | goto out; |
| 3104 | } | 3105 | } |
| 3105 | 3106 | ||
| 3106 | if (hmacs->shmac_num_idents == 0 || | 3107 | idents = hmacs->shmac_num_idents; |
| 3107 | hmacs->shmac_num_idents > SCTP_AUTH_NUM_HMACS) { | 3108 | if (idents == 0 || idents > SCTP_AUTH_NUM_HMACS || |
| 3109 | (idents * sizeof(u16)) > (optlen - sizeof(struct sctp_hmacalgo))) { | ||
| 3108 | err = -EINVAL; | 3110 | err = -EINVAL; |
| 3109 | goto out; | 3111 | goto out; |
| 3110 | } | 3112 | } |
| @@ -3144,7 +3146,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk, | |||
| 3144 | goto out; | 3146 | goto out; |
| 3145 | } | 3147 | } |
| 3146 | 3148 | ||
| 3147 | if (authkey->sca_keylength > optlen) { | 3149 | if (authkey->sca_keylength > optlen - sizeof(struct sctp_authkey)) { |
| 3148 | ret = -EINVAL; | 3150 | ret = -EINVAL; |
| 3149 | goto out; | 3151 | goto out; |
| 3150 | } | 3152 | } |
