aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/wireless/wext-sme.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/wireless/wext-sme.c b/net/wireless/wext-sme.c
index c67d7a82ab13..73fd0eae08ca 100644
--- a/net/wireless/wext-sme.c
+++ b/net/wireless/wext-sme.c
@@ -202,6 +202,7 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
202 struct iw_point *data, char *ssid) 202 struct iw_point *data, char *ssid)
203{ 203{
204 struct wireless_dev *wdev = dev->ieee80211_ptr; 204 struct wireless_dev *wdev = dev->ieee80211_ptr;
205 int ret = 0;
205 206
206 /* call only for station! */ 207 /* call only for station! */
207 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION)) 208 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION))
@@ -219,7 +220,10 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
219 if (ie) { 220 if (ie) {
220 data->flags = 1; 221 data->flags = 1;
221 data->length = ie[1]; 222 data->length = ie[1];
222 memcpy(ssid, ie + 2, data->length); 223 if (data->length > IW_ESSID_MAX_SIZE)
224 ret = -EINVAL;
225 else
226 memcpy(ssid, ie + 2, data->length);
223 } 227 }
224 rcu_read_unlock(); 228 rcu_read_unlock();
225 } else if (wdev->wext.connect.ssid && wdev->wext.connect.ssid_len) { 229 } else if (wdev->wext.connect.ssid && wdev->wext.connect.ssid_len) {
@@ -229,7 +233,7 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
229 } 233 }
230 wdev_unlock(wdev); 234 wdev_unlock(wdev);
231 235
232 return 0; 236 return ret;
233} 237}
234 238
235int cfg80211_mgd_wext_siwap(struct net_device *dev, 239int cfg80211_mgd_wext_siwap(struct net_device *dev,