| From 4baf6bea37247e59f1971e8009d13aeda95edba2 Mon Sep 17 00:00:00 2001 |
| From: Ola Olsson <ola1olsson@gmail.com> |
| Date: Thu, 29 Oct 2015 07:04:58 +0100 |
| Subject: nl80211: Fix potential memory leak from parse_acl_data |
| |
| From: Ola Olsson <ola1olsson@gmail.com> |
| |
| commit 4baf6bea37247e59f1971e8009d13aeda95edba2 upstream. |
| |
| If parse_acl_data succeeds but the subsequent parsing of smps |
| attributes fails, there will be a memory leak due to early returns. |
| Fix that by moving the ACL parsing later. |
| |
| Fixes: 18998c381b19b ("cfg80211: allow requesting SMPS mode on ap start") |
| Signed-off-by: Ola Olsson <ola.olsson@sonymobile.com> |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/wireless/nl80211.c | 12 ++++++------ |
| 1 file changed, 6 insertions(+), 6 deletions(-) |
| |
| --- a/net/wireless/nl80211.c |
| +++ b/net/wireless/nl80211.c |
| @@ -3409,12 +3409,6 @@ static int nl80211_start_ap(struct sk_bu |
| wdev->iftype)) |
| return -EINVAL; |
| |
| - if (info->attrs[NL80211_ATTR_ACL_POLICY]) { |
| - params.acl = parse_acl_data(&rdev->wiphy, info); |
| - if (IS_ERR(params.acl)) |
| - return PTR_ERR(params.acl); |
| - } |
| - |
| if (info->attrs[NL80211_ATTR_SMPS_MODE]) { |
| params.smps_mode = |
| nla_get_u8(info->attrs[NL80211_ATTR_SMPS_MODE]); |
| @@ -3438,6 +3432,12 @@ static int nl80211_start_ap(struct sk_bu |
| params.smps_mode = NL80211_SMPS_OFF; |
| } |
| |
| + if (info->attrs[NL80211_ATTR_ACL_POLICY]) { |
| + params.acl = parse_acl_data(&rdev->wiphy, info); |
| + if (IS_ERR(params.acl)) |
| + return PTR_ERR(params.acl); |
| + } |
| + |
| wdev_lock(wdev); |
| err = rdev_start_ap(rdev, dev, ¶ms); |
| if (!err) { |