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

Commit 4564b187 authored by Johannes Berg's avatar Johannes Berg
Browse files

nl80211: fix nl80211_send_iface() error paths



Evidently I introduced a locking bug in my change here,
the nla_put_failure sometimes needs to unlock. Fix it.

Fixes: 44905265 ("nl80211: don't expose wdev->ssid for most interfaces")
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 0afe9d4a
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -2610,7 +2610,7 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
	case NL80211_IFTYPE_AP:
		if (wdev->ssid_len &&
		    nla_put(msg, NL80211_ATTR_SSID, wdev->ssid_len, wdev->ssid))
			goto nla_put_failure;
			goto nla_put_failure_locked;
		break;
	case NL80211_IFTYPE_STATION:
	case NL80211_IFTYPE_P2P_CLIENT:
@@ -2623,7 +2623,7 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
		if (!ssid_ie)
			break;
		if (nla_put(msg, NL80211_ATTR_SSID, ssid_ie[1], ssid_ie + 2))
			goto nla_put_failure;
			goto nla_put_failure_locked;
		break;
		}
	default:
@@ -2635,6 +2635,8 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
	genlmsg_end(msg, hdr);
	return 0;

 nla_put_failure_locked:
	wdev_unlock(wdev);
 nla_put_failure:
	genlmsg_cancel(msg, hdr);
	return -EMSGSIZE;