|
@@ -2618,12 +2618,13 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
|
|
|
const u8 *ssid_ie;
|
|
|
if (!wdev->current_bss)
|
|
|
break;
|
|
|
+ rcu_read_lock();
|
|
|
ssid_ie = ieee80211_bss_get_ie(&wdev->current_bss->pub,
|
|
|
WLAN_EID_SSID);
|
|
|
- if (!ssid_ie)
|
|
|
- break;
|
|
|
- if (nla_put(msg, NL80211_ATTR_SSID, ssid_ie[1], ssid_ie + 2))
|
|
|
- goto nla_put_failure_locked;
|
|
|
+ if (ssid_ie &&
|
|
|
+ nla_put(msg, NL80211_ATTR_SSID, ssid_ie[1], ssid_ie + 2))
|
|
|
+ goto nla_put_failure_rcu_locked;
|
|
|
+ rcu_read_unlock();
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
@@ -2635,6 +2636,8 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
|
|
|
genlmsg_end(msg, hdr);
|
|
|
return 0;
|
|
|
|
|
|
+ nla_put_failure_rcu_locked:
|
|
|
+ rcu_read_unlock();
|
|
|
nla_put_failure_locked:
|
|
|
wdev_unlock(wdev);
|
|
|
nla_put_failure:
|