]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: mac80211: fix prep_connection error path
authorJohannes Berg <johannes.berg@intel.com>
Mon, 18 Mar 2024 16:53:30 +0000 (18:53 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 May 2024 10:14:38 +0000 (12:14 +0200)
[ Upstream commit 2e6bd24339a6ff04413b2e49c0f2672d6f0edfa5 ]

If prep_channel fails in prep_connection, the code releases
the deflink's chanctx, which is wrong since we may be using
a different link. It's already wrong to even do that always
though, since we might still have the station. Remove it
only if prep_channel succeeded and later updates fail.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240318184907.2780c1f08c3d.I033c9b15483933088f32a2c0789612a33dd33d82@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/mac80211/mlme.c

index 94028b541beba3906954940575faaca789331b11..ac0073c8f96f43935ec2f416331c7e2565d370d1 100644 (file)
@@ -7294,7 +7294,7 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
                        sdata_info(sdata,
                                   "failed to insert STA entry for the AP (error %d)\n",
                                   err);
-                       goto out_err;
+                       goto out_release_chan;
                }
        } else
                WARN_ON_ONCE(!ether_addr_equal(link->u.mgd.bssid, cbss->bssid));
@@ -7305,8 +7305,9 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
 
        return 0;
 
+out_release_chan:
+       ieee80211_link_release_channel(link);
 out_err:
-       ieee80211_link_release_channel(&sdata->deflink);
        ieee80211_vif_set_links(sdata, 0, 0);
        return err;
 }