diff options
| -rw-r--r-- | net/wireless/wext-compat.c | 3 | ||||
| -rw-r--r-- | net/wireless/wext-core.c | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index bb5e0a5ecfa1..7e5c3a45f811 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c | |||
| @@ -1420,6 +1420,9 @@ int cfg80211_wext_giwessid(struct net_device *dev, | |||
| 1420 | { | 1420 | { |
| 1421 | struct wireless_dev *wdev = dev->ieee80211_ptr; | 1421 | struct wireless_dev *wdev = dev->ieee80211_ptr; |
| 1422 | 1422 | ||
| 1423 | data->flags = 0; | ||
| 1424 | data->length = 0; | ||
| 1425 | |||
| 1423 | switch (wdev->iftype) { | 1426 | switch (wdev->iftype) { |
| 1424 | case NL80211_IFTYPE_ADHOC: | 1427 | case NL80211_IFTYPE_ADHOC: |
| 1425 | return cfg80211_ibss_wext_giwessid(dev, info, data, ssid); | 1428 | return cfg80211_ibss_wext_giwessid(dev, info, data, ssid); |
diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c index 0ef17bc42bac..8f5116f5af19 100644 --- a/net/wireless/wext-core.c +++ b/net/wireless/wext-core.c | |||
| @@ -782,6 +782,22 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd, | |||
| 782 | } | 782 | } |
| 783 | } | 783 | } |
| 784 | 784 | ||
| 785 | if (IW_IS_GET(cmd) && !(descr->flags & IW_DESCR_FLAG_NOMAX)) { | ||
| 786 | /* | ||
| 787 | * If this is a GET, but not NOMAX, it means that the extra | ||
| 788 | * data is not bounded by userspace, but by max_tokens. Thus | ||
| 789 | * set the length to max_tokens. This matches the extra data | ||
| 790 | * allocation. | ||
| 791 | * The driver should fill it with the number of tokens it | ||
| 792 | * provided, and it may check iwp->length rather than having | ||
| 793 | * knowledge of max_tokens. If the driver doesn't change the | ||
| 794 | * iwp->length, this ioctl just copies back max_token tokens | ||
| 795 | * filled with zeroes. Hopefully the driver isn't claiming | ||
| 796 | * them to be valid data. | ||
| 797 | */ | ||
| 798 | iwp->length = descr->max_tokens; | ||
| 799 | } | ||
| 800 | |||
| 785 | err = handler(dev, info, (union iwreq_data *) iwp, extra); | 801 | err = handler(dev, info, (union iwreq_data *) iwp, extra); |
| 786 | 802 | ||
| 787 | iwp->length += essid_compat; | 803 | iwp->length += essid_compat; |
