diff options
Diffstat (limited to 'net/wireless')
| -rw-r--r-- | net/wireless/core.c | 17 | ||||
| -rw-r--r-- | net/wireless/nl80211.c | 4 | ||||
| -rw-r--r-- | net/wireless/sme.c | 3 | ||||
| -rw-r--r-- | net/wireless/trace.h | 23 |
4 files changed, 29 insertions, 18 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index 84c9ad7e1dca..73405e00c800 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
| @@ -638,17 +638,21 @@ int wiphy_register(struct wiphy *wiphy) | |||
| 638 | * cfg80211_mutex lock | 638 | * cfg80211_mutex lock |
| 639 | */ | 639 | */ |
| 640 | res = rfkill_register(rdev->rfkill); | 640 | res = rfkill_register(rdev->rfkill); |
| 641 | if (res) | 641 | if (res) { |
| 642 | goto out_rm_dev; | 642 | device_del(&rdev->wiphy.dev); |
| 643 | |||
| 644 | mutex_lock(&cfg80211_mutex); | ||
| 645 | debugfs_remove_recursive(rdev->wiphy.debugfsdir); | ||
| 646 | list_del_rcu(&rdev->list); | ||
| 647 | wiphy_regulatory_deregister(wiphy); | ||
| 648 | mutex_unlock(&cfg80211_mutex); | ||
| 649 | return res; | ||
| 650 | } | ||
| 643 | 651 | ||
| 644 | rtnl_lock(); | 652 | rtnl_lock(); |
| 645 | rdev->wiphy.registered = true; | 653 | rdev->wiphy.registered = true; |
| 646 | rtnl_unlock(); | 654 | rtnl_unlock(); |
| 647 | return 0; | 655 | return 0; |
| 648 | |||
| 649 | out_rm_dev: | ||
| 650 | device_del(&rdev->wiphy.dev); | ||
| 651 | return res; | ||
| 652 | } | 656 | } |
| 653 | EXPORT_SYMBOL(wiphy_register); | 657 | EXPORT_SYMBOL(wiphy_register); |
| 654 | 658 | ||
| @@ -866,7 +870,6 @@ void cfg80211_leave(struct cfg80211_registered_device *rdev, | |||
| 866 | #endif | 870 | #endif |
| 867 | __cfg80211_disconnect(rdev, dev, | 871 | __cfg80211_disconnect(rdev, dev, |
| 868 | WLAN_REASON_DEAUTH_LEAVING, true); | 872 | WLAN_REASON_DEAUTH_LEAVING, true); |
| 869 | cfg80211_mlme_down(rdev, dev); | ||
| 870 | wdev_unlock(wdev); | 873 | wdev_unlock(wdev); |
| 871 | break; | 874 | break; |
| 872 | case NL80211_IFTYPE_MESH_POINT: | 875 | case NL80211_IFTYPE_MESH_POINT: |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index afa283841e8c..dfdb5e643211 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
| @@ -7577,6 +7577,8 @@ static int nl80211_send_wowlan_tcp(struct sk_buff *msg, | |||
| 7577 | &tcp->payload_tok)) | 7577 | &tcp->payload_tok)) |
| 7578 | return -ENOBUFS; | 7578 | return -ENOBUFS; |
| 7579 | 7579 | ||
| 7580 | nla_nest_end(msg, nl_tcp); | ||
| 7581 | |||
| 7580 | return 0; | 7582 | return 0; |
| 7581 | } | 7583 | } |
| 7582 | 7584 | ||
| @@ -9970,6 +9972,7 @@ int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, | |||
| 9970 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || | 9972 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || |
| 9971 | (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, | 9973 | (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, |
| 9972 | netdev->ifindex)) || | 9974 | netdev->ifindex)) || |
| 9975 | nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || | ||
| 9973 | nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq) || | 9976 | nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq) || |
| 9974 | (sig_dbm && | 9977 | (sig_dbm && |
| 9975 | nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) || | 9978 | nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) || |
| @@ -10010,6 +10013,7 @@ void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie, | |||
| 10010 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || | 10013 | if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || |
| 10011 | (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, | 10014 | (netdev && nla_put_u32(msg, NL80211_ATTR_IFINDEX, |
| 10012 | netdev->ifindex)) || | 10015 | netdev->ifindex)) || |
| 10016 | nla_put_u64(msg, NL80211_ATTR_WDEV, wdev_id(wdev)) || | ||
| 10013 | nla_put(msg, NL80211_ATTR_FRAME, len, buf) || | 10017 | nla_put(msg, NL80211_ATTR_FRAME, len, buf) || |
| 10014 | nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie) || | 10018 | nla_put_u64(msg, NL80211_ATTR_COOKIE, cookie) || |
| 10015 | (ack && nla_put_flag(msg, NL80211_ATTR_ACK))) | 10019 | (ack && nla_put_flag(msg, NL80211_ATTR_ACK))) |
diff --git a/net/wireless/sme.c b/net/wireless/sme.c index a9dc5c736df0..8b5eddfba1e5 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c | |||
| @@ -961,7 +961,7 @@ int __cfg80211_disconnect(struct cfg80211_registered_device *rdev, | |||
| 961 | /* was it connected by userspace SME? */ | 961 | /* was it connected by userspace SME? */ |
| 962 | if (!wdev->conn) { | 962 | if (!wdev->conn) { |
| 963 | cfg80211_mlme_down(rdev, dev); | 963 | cfg80211_mlme_down(rdev, dev); |
| 964 | return 0; | 964 | goto disconnect; |
| 965 | } | 965 | } |
| 966 | 966 | ||
| 967 | if (wdev->sme_state == CFG80211_SME_CONNECTING && | 967 | if (wdev->sme_state == CFG80211_SME_CONNECTING && |
| @@ -987,6 +987,7 @@ int __cfg80211_disconnect(struct cfg80211_registered_device *rdev, | |||
| 987 | return err; | 987 | return err; |
| 988 | } | 988 | } |
| 989 | 989 | ||
| 990 | disconnect: | ||
| 990 | if (wdev->sme_state == CFG80211_SME_CONNECTED) | 991 | if (wdev->sme_state == CFG80211_SME_CONNECTED) |
| 991 | __cfg80211_disconnected(dev, NULL, 0, 0, false); | 992 | __cfg80211_disconnected(dev, NULL, 0, 0, false); |
| 992 | else if (wdev->sme_state == CFG80211_SME_CONNECTING) | 993 | else if (wdev->sme_state == CFG80211_SME_CONNECTING) |
diff --git a/net/wireless/trace.h b/net/wireless/trace.h index ecd4fcec3c94..5755bc14abbd 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h | |||
| @@ -2441,6 +2441,7 @@ TRACE_EVENT(cfg80211_report_wowlan_wakeup, | |||
| 2441 | TP_STRUCT__entry( | 2441 | TP_STRUCT__entry( |
| 2442 | WIPHY_ENTRY | 2442 | WIPHY_ENTRY |
| 2443 | WDEV_ENTRY | 2443 | WDEV_ENTRY |
| 2444 | __field(bool, non_wireless) | ||
| 2444 | __field(bool, disconnect) | 2445 | __field(bool, disconnect) |
| 2445 | __field(bool, magic_pkt) | 2446 | __field(bool, magic_pkt) |
| 2446 | __field(bool, gtk_rekey_failure) | 2447 | __field(bool, gtk_rekey_failure) |
| @@ -2449,20 +2450,22 @@ TRACE_EVENT(cfg80211_report_wowlan_wakeup, | |||
| 2449 | __field(bool, rfkill_release) | 2450 | __field(bool, rfkill_release) |
| 2450 | __field(s32, pattern_idx) | 2451 | __field(s32, pattern_idx) |
| 2451 | __field(u32, packet_len) | 2452 | __field(u32, packet_len) |
| 2452 | __dynamic_array(u8, packet, wakeup->packet_present_len) | 2453 | __dynamic_array(u8, packet, |
| 2454 | wakeup ? wakeup->packet_present_len : 0) | ||
| 2453 | ), | 2455 | ), |
| 2454 | TP_fast_assign( | 2456 | TP_fast_assign( |
| 2455 | WIPHY_ASSIGN; | 2457 | WIPHY_ASSIGN; |
| 2456 | WDEV_ASSIGN; | 2458 | WDEV_ASSIGN; |
| 2457 | __entry->disconnect = wakeup->disconnect; | 2459 | __entry->non_wireless = !wakeup; |
| 2458 | __entry->magic_pkt = wakeup->magic_pkt; | 2460 | __entry->disconnect = wakeup ? wakeup->disconnect : false; |
| 2459 | __entry->gtk_rekey_failure = wakeup->gtk_rekey_failure; | 2461 | __entry->magic_pkt = wakeup ? wakeup->magic_pkt : false; |
| 2460 | __entry->eap_identity_req = wakeup->eap_identity_req; | 2462 | __entry->gtk_rekey_failure = wakeup ? wakeup->gtk_rekey_failure : false; |
| 2461 | __entry->four_way_handshake = wakeup->four_way_handshake; | 2463 | __entry->eap_identity_req = wakeup ? wakeup->eap_identity_req : false; |
| 2462 | __entry->rfkill_release = wakeup->rfkill_release; | 2464 | __entry->four_way_handshake = wakeup ? wakeup->four_way_handshake : false; |
| 2463 | __entry->pattern_idx = wakeup->pattern_idx; | 2465 | __entry->rfkill_release = wakeup ? wakeup->rfkill_release : false; |
| 2464 | __entry->packet_len = wakeup->packet_len; | 2466 | __entry->pattern_idx = wakeup ? wakeup->pattern_idx : false; |
| 2465 | if (wakeup->packet && wakeup->packet_present_len) | 2467 | __entry->packet_len = wakeup ? wakeup->packet_len : false; |
| 2468 | if (wakeup && wakeup->packet && wakeup->packet_present_len) | ||
| 2466 | memcpy(__get_dynamic_array(packet), wakeup->packet, | 2469 | memcpy(__get_dynamic_array(packet), wakeup->packet, |
| 2467 | wakeup->packet_present_len); | 2470 | wakeup->packet_present_len); |
| 2468 | ), | 2471 | ), |
