Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4baf6bea authored by Ola Olsson's avatar Ola Olsson Committed by Johannes Berg
Browse files

nl80211: Fix potential memory leak from parse_acl_data



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.

Cc: stable@vger.kernel.org
Fixes: 18998c38 ("cfg80211: allow requesting SMPS mode on ap start")
Signed-off-by: default avatarOla Olsson <ola.olsson@sonymobile.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 519ee691
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -3432,12 +3432,6 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
					   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]);
@@ -3461,6 +3455,12 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
		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, &params);
	if (!err) {