diff options
author | Krzysztof Wilczynski <krzysztof.wilczynski@linux.com> | 2012-04-24 10:00:34 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-24 14:28:25 -0400 |
commit | 19f798ad009a1c9aebe6c248173e4a7ec694c680 (patch) | |
tree | de47eddffc271682ae49c16c26fbfffd999143c9 | |
parent | 89f5e7102a56bcd1b5b0691085d0839e92b3ca04 (diff) |
staging: wlan-ng: Release struct returned by cfg80211_inform_bss to avoid potential memory leak.
Function cfg80211_inform_bss returns a pointer to a referenced struct cfg80211_bss
but no information is needed from this struct in function prism2_scan and therefore
we release it by calling cfg80211_put_bss.
Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/wlan-ng/cfg80211.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/staging/wlan-ng/cfg80211.c b/drivers/staging/wlan-ng/cfg80211.c index 4cd3ba5d564..8bc562b8c4d 100644 --- a/drivers/staging/wlan-ng/cfg80211.c +++ b/drivers/staging/wlan-ng/cfg80211.c | |||
@@ -332,6 +332,7 @@ int prism2_scan(struct wiphy *wiphy, struct net_device *dev, | |||
332 | wlandevice_t *wlandev = dev->ml_priv; | 332 | wlandevice_t *wlandev = dev->ml_priv; |
333 | struct p80211msg_dot11req_scan msg1; | 333 | struct p80211msg_dot11req_scan msg1; |
334 | struct p80211msg_dot11req_scan_results msg2; | 334 | struct p80211msg_dot11req_scan_results msg2; |
335 | struct cfg80211_bss *bss; | ||
335 | int result; | 336 | int result; |
336 | int err = 0; | 337 | int err = 0; |
337 | int numbss = 0; | 338 | int numbss = 0; |
@@ -401,7 +402,7 @@ int prism2_scan(struct wiphy *wiphy, struct net_device *dev, | |||
401 | ie_buf[1] = msg2.ssid.data.len; | 402 | ie_buf[1] = msg2.ssid.data.len; |
402 | ie_len = ie_buf[1] + 2; | 403 | ie_len = ie_buf[1] + 2; |
403 | memcpy(&ie_buf[2], &(msg2.ssid.data.data), msg2.ssid.data.len); | 404 | memcpy(&ie_buf[2], &(msg2.ssid.data.data), msg2.ssid.data.len); |
404 | cfg80211_inform_bss(wiphy, | 405 | bss = cfg80211_inform_bss(wiphy, |
405 | ieee80211_get_channel(wiphy, ieee80211_dsss_chan_to_freq(msg2.dschannel.data)), | 406 | ieee80211_get_channel(wiphy, ieee80211_dsss_chan_to_freq(msg2.dschannel.data)), |
406 | (const u8 *) &(msg2.bssid.data.data), | 407 | (const u8 *) &(msg2.bssid.data.data), |
407 | msg2.timestamp.data, msg2.capinfo.data, | 408 | msg2.timestamp.data, msg2.capinfo.data, |
@@ -411,6 +412,13 @@ int prism2_scan(struct wiphy *wiphy, struct net_device *dev, | |||
411 | (msg2.signal.data - 65536) * 100, /* Conversion to signed type */ | 412 | (msg2.signal.data - 65536) * 100, /* Conversion to signed type */ |
412 | GFP_KERNEL | 413 | GFP_KERNEL |
413 | ); | 414 | ); |
415 | |||
416 | if (!bss) { | ||
417 | err = -ENOMEM; | ||
418 | goto exit; | ||
419 | } | ||
420 | |||
421 | cfg80211_put_bss(bss); | ||
414 | } | 422 | } |
415 | 423 | ||
416 | if (result) | 424 | if (result) |