diff options
| -rw-r--r-- | net/wireless/nl80211.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 2b3dbcd40e46..ed87a97fcb0b 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -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:  | 
