From nobody Tue Oct 7 08:37:45 2025 Received: from e2i340.smtp2go.com (e2i340.smtp2go.com [103.2.141.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36BA927FB19 for ; Fri, 11 Jul 2025 10:13:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.2.141.84 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752228814; cv=none; b=nnPoJE3fLhBO6g0hWkacHTxd7SBaTHCezZMf0Q51WbTT1X1+hkRCyGVkrPbKXambZS2Q0T8hTKtnRMzPMwz6zIgbnjXN4HnYHFiSXURG4YvSqisggzczK2Ge2XFgJj3LqfEccPYZAO8jwn7jctrmjQI2pILYHYOwwH6H3dHDsRg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752228814; c=relaxed/simple; bh=h8sDtTBFaKQV2BzaMtetG1bYXeS9efVwysgWyiEug68=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Eo4a7VvaAVnteNLmlPl6wBCAgzKpRXmi3nDtzoIjMvmWMCKKfPC5ib1wJCsF5uaVQDxbGYBNTIgraypT5G/FhSkuxJnec58nq/SCgM0Wn6pWjxve0+LcIa6jHh86qJY9fpgtpOaldfNOsz8A/fvkVf8pigL7ZtB7KOPF7vQI2ng= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=triplefau.lt; spf=pass smtp.mailfrom=em510616.triplefau.lt; dkim=fail (0-bit key) header.d=smtpservice.net header.i=@smtpservice.net header.b=njJ97rF5 reason="unknown key version"; dkim=pass (2048-bit key) header.d=triplefau.lt header.i=@triplefau.lt header.b=GyOnSe5Q; arc=none smtp.client-ip=103.2.141.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=triplefau.lt Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=em510616.triplefau.lt Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="unknown key version" (0-bit key) header.d=smtpservice.net header.i=@smtpservice.net header.b="njJ97rF5"; dkim=pass (2048-bit key) header.d=triplefau.lt header.i=@triplefau.lt header.b="GyOnSe5Q" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=maxzs0.a1-4.dyn; x=1752229712; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe:List-Unsubscribe-Post; bh=dzP7r4lWPYTYs3RU7pAFEhDbKI/TMIWoBzzkQ7Rua34=; b=njJ97rF5NihJXst7F7w2m9obxj X4mYODutix/BC4lAb6VMI0QU1I32Gg6O5mNVcroCkhHK7btEYgYrCn5cA7bJnMrgl0lXh3T3We4Dz oWOhKmlSKU8any6oZ8r3CEURh2fRV0kp0EiwbON9OxadBgBtt7zTVSfLAsNO/0Ea1wIVwmFr02fPW 2mq17zNyZ6DfRT7yvC5DiZ5qpaT4zJWYuMgPKz+qRzsJNreV2Y+JR/CqfUXgNmk/tjT5sI05Y4xtA 8H7zc4oBL+/dYVv6yk1AHrEKH39i6sKW4Ctp5plSv8Aqq2bmrjdAo0zTMXiRxir95ltHR1IYDj1Dl sRzt9p6A==; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=triplefau.lt; i=@triplefau.lt; q=dns/txt; s=s510616; t=1752228812; h=from : subject : to : message-id : date; bh=dzP7r4lWPYTYs3RU7pAFEhDbKI/TMIWoBzzkQ7Rua34=; b=GyOnSe5QHOVGwPKv1m5m21dy6fuNi1ydZRdEuxcOuiWTxlA1lg/fwpZ/Fxo70mCyLjTIK EpVX/8LrYNrqJ3eDaXCEn+F9SRoyHojNHuZvN/moDzU6jPJgwWMV4jDbazvtKO88niv5vaf hdvzwt092gIdkHVVPB6XtB2sI9LcSgqPdUtdsumNk6lbL23a0DBWBNrWSenLoRchTTGLZw7 INz/+k+a7QJh+XwvFG7X5sag3T4pmOnVEOS4QTh+ktAfDSXHMM1jDyUzD00kz/vV2k8irP+ +ycawfq6O2HV4fPZFtcxgZZLytwnBapqYGCW805iat06QWlqE5zaI29esUWA== Received: from [10.172.233.45] (helo=SmtpCorp) by smtpcorp.com with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2-S2G) (envelope-from ) id 1uaAkv-TRk697-0t; Fri, 11 Jul 2025 10:13:25 +0000 Received: from [10.12.239.196] (helo=localhost) by smtpcorp.com with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.98.1-S2G) (envelope-from ) id 1uaAku-AIkwcC8mMix-JkmE; Fri, 11 Jul 2025 10:13:24 +0000 From: Remi Pommarel To: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Johannes Berg , Remi Pommarel Subject: [RFC PACTH v2 wireless-next 1/3] wifi: mac80211: Get link_id from freq for received management frame Date: Fri, 11 Jul 2025 12:03:18 +0200 Message-Id: X-Mailer: git-send-email 2.40.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Smtpcorp-Track: K8KxmYQGhkNx.sPRxa3Z5KdA2.IacAFQsVM8Z Feedback-ID: 510616m:510616apGKSTK:510616s4UM4Uu-B8 X-Report-Abuse: Please forward a copy of this message, including all headers, to Content-Type: text/plain; charset="utf-8" A non-MLD sta could want to send offchannel management frame (e.g. to do a offchannel scan). Because ieee80211_rx_for_interface() fills the link_id information with the link the sta is currently using; hostapd would send back management frame responses through wrong link causing the sta to miss them. To fix that, use link_id that matches the received frame frequency if any or do not fill link_id indication for management frames, relying on hostapd instead to infer the proper link from the received frame frequency. Signed-off-by: Remi Pommarel --- net/mac80211/rx.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index caa3e6b3f46e..26be0f378b3f 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -5114,6 +5114,37 @@ static void __ieee80211_rx_handle_8023(struct ieee80= 211_hw *hw, dev_kfree_skb(skb); } =20 +static int ieee80211_rx_get_link_from_freq(struct ieee80211_rx_data *rx, + struct sk_buff *skb, + struct link_sta_info *link_sta) +{ + struct ieee80211_rx_status *status =3D IEEE80211_SKB_RXCB(skb); + struct ieee80211_sta *sta =3D &link_sta->sta->sta; + struct ieee80211_link_data *link; + struct ieee80211_bss_conf *bss_conf; + struct ieee80211_chanctx_conf *conf; + + if (!status->freq) + return link_sta->link_id; + + for_each_link_data(rx->sdata, link) { + bss_conf =3D link->conf; + if (!bss_conf) + continue; + conf =3D rcu_dereference(bss_conf->chanctx_conf); + if (!conf || !conf->def.chan) + continue; + + if (conf->def.chan->center_freq !=3D status->freq) + continue; + + if (ieee80211_rx_is_valid_sta_link_id(sta, link->link_id)) + return link->link_id; + } + + return -1; +} + static bool ieee80211_rx_for_interface(struct ieee80211_rx_data *rx, struct sk_buff *skb, bool consume) { @@ -5131,7 +5162,15 @@ static bool ieee80211_rx_for_interface(struct ieee80= 211_rx_data *rx, link_sta =3D link_sta_info_get_bss(rx->sdata, hdr->addr2); if (link_sta) { sta =3D link_sta->sta; - link_id =3D link_sta->link_id; + + /* Use freq to get link id information on management frames to + * allow for offchannel scan, roaming, etc. + */ + if (ieee80211_is_mgmt(hdr->frame_control)) + link_id =3D ieee80211_rx_get_link_from_freq(rx, skb, + link_sta); + else + link_id =3D link_sta->link_id; } else { struct ieee80211_rx_status *status =3D IEEE80211_SKB_RXCB(skb); =20 --=20 2.40.0 From nobody Tue Oct 7 08:37:45 2025 Received: from e2i340.smtp2go.com (e2i340.smtp2go.com [103.2.141.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D2DF327FB0E for ; Fri, 11 Jul 2025 10:13:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.2.141.84 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752228814; cv=none; b=lBHMQsAcPqaN/hU/i84Kkp9kp8t7b+uJrsF+7rVQrHXTFxtXr2K04USHElrnKPb/VrzdbzwEfgDh4d+9xQKD1gJYgDnr/Wgzbpp7+fAa2Ffrh2pe3I2IMONKkM/97tyN0SumiHCmV1S9D3s/LMe04SeMcPfVJWBbZUtbIZI7tHw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752228814; c=relaxed/simple; bh=iYW1urDA+J8ItpsBASZ/fIer3hBLBgL3fsKPeaG4LEs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Mn6uyak0CrGQCV1anteObt7M9bN1aya3E6b22jaZ5cGAZ0qU1oQCQZTjYs0ErM74Lz6DMG1aU34ckEaUKMaicPU1+TOm0NiNHVnV6jFwDALbP1Wks0AVAKJUs1iF9UxG96PyblCWzDBRZy6MD3Q8AiViwFEXsISMDixrUG+yOR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=triplefau.lt; spf=pass smtp.mailfrom=em510616.triplefau.lt; dkim=fail (0-bit key) header.d=smtpservice.net header.i=@smtpservice.net header.b=Tb0hsBBl reason="unknown key version"; dkim=pass (2048-bit key) header.d=triplefau.lt header.i=@triplefau.lt header.b=NjKhmJo4; arc=none smtp.client-ip=103.2.141.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=triplefau.lt Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=em510616.triplefau.lt Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="unknown key version" (0-bit key) header.d=smtpservice.net header.i=@smtpservice.net header.b="Tb0hsBBl"; dkim=pass (2048-bit key) header.d=triplefau.lt header.i=@triplefau.lt header.b="NjKhmJo4" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=maxzs0.a1-4.dyn; x=1752229713; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe:List-Unsubscribe-Post; bh=X0gOzHc7MjO+Xkrz1FdedGsE2tBnHEgnmzARquvVn0E=; b=Tb0hsBBlaI8UHghL5szhsfUxpC m4GjKMjb0lqtcJuMKU2aYXnU0ZcWewuYEsBkiC6iAhB7jPpzZRO7i1WuJ8hB6sdK/nd4WbycoPePB 35ZwQus5mf3YHn3n2e0QTkLfRwaJfLMz14lGL+4QfuO2fbu7LvSe3PlmxjEqstGFMyTHj4TGVA+eM wvUSUNWqeLvUHWBmpvuXezZpOI/VW32qe1mrXo2Ea0Uy3BWiZd9V+Y1je68Nwvk1rGK8wTy/rPurF heh1Dgdp3dzmMrInBo2nSdKpV6ye+/pXEzAqgPxW78+BJcLu5TSaUSbFxmBbvmrk6GwnTnDH5xbxm LaSNUfaA==; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=triplefau.lt; i=@triplefau.lt; q=dns/txt; s=s510616; t=1752228813; h=from : subject : to : message-id : date; bh=X0gOzHc7MjO+Xkrz1FdedGsE2tBnHEgnmzARquvVn0E=; b=NjKhmJo4DB8U3bJBMissUGcs6hqd3QbCOH/Y5LfFKIQ0Sdz5rR7/xIDi+zrWmgD+wdgPp bIY//gYRwmvJYs+GpG1JIvaEKenlkd5116D0C0VcLIuLOb67NtF/T+G+AyNg+3tFT6EvunC XDwx2Ack/5VfbaqCo7QsNuVXH+4YD4/7XnK5iRRTIHIz8T7Umgm3IYkrZLujY1XAvYqGiaR mu/+IZ3HLq/BobmXFfG72fGnjHv+Ib9R2tmDVHr4wMjM3eCekXKd2tQFeVO+feLIefTcSvN 4CQGSwK2w9XjZuPZMNbhyG1HZbP7/SvewOXMtF55BkDHeu5FNtOMYWQ3Vzdg== Received: from [10.139.162.187] (helo=SmtpCorp) by smtpcorp.com with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2-S2G) (envelope-from ) id 1uaAkv-TRk6D0-RY; Fri, 11 Jul 2025 10:13:25 +0000 Received: from [10.12.239.196] (helo=localhost) by smtpcorp.com with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.98.1-S2G) (envelope-from ) id 1uaAkv-4o5NDgrrfkz-mXyv; Fri, 11 Jul 2025 10:13:25 +0000 From: Remi Pommarel To: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Johannes Berg , Remi Pommarel Subject: [RFC PATCH v2 wireless-next 2/3] wifi: mac80211: Correctly init MLO link in ieee80211_8023_xmit() Date: Fri, 11 Jul 2025 12:03:19 +0200 Message-Id: X-Mailer: git-send-email 2.40.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Smtpcorp-Track: soChYzaxMFMR.ugBXRM-nzJ7U.wQiEqQBwzO2 Feedback-ID: 510616m:510616apGKSTK:510616sbg9r1WNUf X-Report-Abuse: Please forward a copy of this message, including all headers, to Content-Type: text/plain; charset="utf-8" The IEEE80211_TX_CTRL_MLO_LINK info is the only part of ieee80211_tx_control where a 0 value has a specific meaning. Thus this should always be initialized with IEEE80211_LINK_UNSPECIFIED if there is no MLO link information associated with the skb, even using when 802.11 hw encap offloading. Signed-off-by: Remi Pommarel --- net/mac80211/tx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 6fa883a9250d..1d6b976bba72 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -4638,6 +4638,8 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_= if_data *sdata, =20 info->flags |=3D IEEE80211_TX_CTL_HW_80211_ENCAP; info->control.vif =3D &sdata->vif; + info->control.flags |=3D u32_encode_bits(IEEE80211_LINK_UNSPECIFIED, + IEEE80211_TX_CTRL_MLO_LINK); =20 if (key) info->control.hw_key =3D &key->conf; --=20 2.40.0 From nobody Tue Oct 7 08:37:45 2025 Received: from e2i340.smtp2go.com (e2i340.smtp2go.com [103.2.141.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CDF1827FB0C for ; Fri, 11 Jul 2025 10:13:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.2.141.84 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752228813; cv=none; b=OctYwysUNASDy2phX+5UoQ7+a5ZnylcBJRWyImGXmonGwGXa3fjEUzjMLrJrWPc41lKZo6+arvh/sMzZpAc/y6YDobBKYooSHHLRhb2TdkCOaKMlh2Crz6MQtP+xubryaKWGrMEwhfO8e8yk0jFHOhBLWLxgB06sc5Fb5E6kXW8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752228813; c=relaxed/simple; bh=wZRySA4lz28cjksFVP733NJp4H6+uYUyG7offN581Wg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=naUch3ZNruoSXRwUtZ3DGONYZT0nFWJVCBYVg4DwBYd9ufgjkJG/37uKSF/pA7saeXEiKW5jbXIAQoZcn30+Vm7/x1rOTStc+8GgNUJStE02XTC1fegWh8I5I/mb0WgyveRKY1aprTk2/jjzMYBJ1LcJab56/+h6nf8TDzh/zzY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=triplefau.lt; spf=pass smtp.mailfrom=em510616.triplefau.lt; dkim=fail (0-bit key) header.d=smtpservice.net header.i=@smtpservice.net header.b=Dt4bBXYK reason="unknown key version"; dkim=pass (2048-bit key) header.d=triplefau.lt header.i=@triplefau.lt header.b=C81Q7tJ/; arc=none smtp.client-ip=103.2.141.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=triplefau.lt Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=em510616.triplefau.lt Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="unknown key version" (0-bit key) header.d=smtpservice.net header.i=@smtpservice.net header.b="Dt4bBXYK"; dkim=pass (2048-bit key) header.d=triplefau.lt header.i=@triplefau.lt header.b="C81Q7tJ/" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=maxzs0.a1-4.dyn; x=1752229712; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe:List-Unsubscribe-Post; bh=K5i9iQTovVSe0BiRNCldsIl2QT/Jg4d39IT5+8FPoo4=; b=Dt4bBXYKS5L9SSKIDhe2Xj9x+W dkGukrvjKu+w2/YxJUVnRaPqKb1bNChBvfg5rHdah/4CnFmvOoqwPSMkl7AKtmT2H0gKtSSFr9pBA WsZzQXOEpoO2Ld7IfpV2Z713D9rUpWmatFQcLarX4YTHTwCnB/J/HxfNAg43YoZXhbN5k24tM52Ou iwMBlimsI/3F+xALe1mpu5npFcZnaN0AQa/Yi6+uqjwwn50qX1htTYdSj4Jgt2KN2tSwv/WFKalVf C5Yc81PJtCEztvtjgkH0E4XugNnI26wLl5y34h1Zl9hIaglJ6ogGRcOZcWTJjz/jeCL0UVBl0S3Um pr6TkPbA==; DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=triplefau.lt; i=@triplefau.lt; q=dns/txt; s=s510616; t=1752228812; h=from : subject : to : message-id : date; bh=K5i9iQTovVSe0BiRNCldsIl2QT/Jg4d39IT5+8FPoo4=; b=C81Q7tJ/2/4i5j60l2cZ078FBW+loOCJBqquvp+kqbuZilKiTExaoGdW1L0koB1kNuJBY CCBbtjAPtDZX0B13fk81EoJxzuo6e0+YfS/w/79yJohH44BEZgGJ41tJAVwtFtUciCICfD1 nahzTxhozkMINlczfboM2ONsNwBYqrU2S9JBQWiFOioJqyV/svEzAIHhkqFDCjU1YjGsdSA e0NpdMLIQdrJMqAom2j+/X9pZ7nRPCMo8OMLDDsi30BTKs7q7WaJNk145PTUJTzGgPIeiyo /b73B8jT0scFQfZWF9MgxmveL3t7+lesZ4mXsT5XtIO59yG14VW4MMLUaDaQ== Received: from [10.176.58.103] (helo=SmtpCorp) by smtpcorp.com with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94.2-S2G) (envelope-from ) id 1uaAkw-TRk6Ep-Cd; Fri, 11 Jul 2025 10:13:26 +0000 Received: from [10.12.239.196] (helo=localhost) by smtpcorp.com with esmtpsa (TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.98.1-S2G) (envelope-from ) id 1uaAkw-4o5NDgrka66-oyAz; Fri, 11 Jul 2025 10:13:26 +0000 From: Remi Pommarel To: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Johannes Berg , Remi Pommarel Subject: [RFC PATCH v2 wireless-next 3/3] wifi: mac80211: Check link id at station removal Date: Fri, 11 Jul 2025 12:03:20 +0200 Message-Id: X-Mailer: git-send-email 2.40.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Smtpcorp-Track: JAhK-vQaQhF5.tbMelu8K9EC6.KacG2Qrg7fa Feedback-ID: 510616m:510616apGKSTK:510616sZr30L41yo X-Report-Abuse: Please forward a copy of this message, including all headers, to Content-Type: text/plain; charset="utf-8" hostapd can remove a non-MLD sta connected to one link of one MLD AP several times. If the sta roamed to another link of the same MLD AP between two of those removals the wrong sta_info could be removed. To fix that remove sta only if it is currently using the link specified in NL80211_CMD_DEL_STATION if they are any. Signed-off-by: Remi Pommarel --- net/mac80211/cfg.c | 3 ++- net/mac80211/sta_info.c | 7 ++++++- net/mac80211/sta_info.h | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 56540c3701ed..727eea74bd37 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -2217,7 +2217,8 @@ static int ieee80211_del_station(struct wiphy *wiphy,= struct net_device *dev, sdata =3D IEEE80211_DEV_TO_SUB_IF(dev); =20 if (params->mac) - return sta_info_destroy_addr_bss(sdata, params->mac); + return sta_info_destroy_addr_bss(sdata, params->mac, + params->link_id); =20 sta_info_flush(sdata, params->link_id); return 0; diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 8c550aab9bdc..f43ebc97134f 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -1579,13 +1579,18 @@ int sta_info_destroy_addr(struct ieee80211_sub_if_d= ata *sdata, const u8 *addr) } =20 int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata, - const u8 *addr) + const u8 *addr, int link_id) { struct sta_info *sta; =20 lockdep_assert_wiphy(sdata->local->hw.wiphy); =20 sta =3D sta_info_get_bss(sdata, addr); + + if (sta && link_id >=3D 0 && sta->sta.valid_links && + !(sta->sta.valid_links & BIT(link_id))) + return -EINVAL; + return __sta_info_destroy(sta); } =20 diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index 5288d5286651..a6d2c847a91c 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h @@ -932,7 +932,7 @@ int __must_check __sta_info_destroy(struct sta_info *st= a); int sta_info_destroy_addr(struct ieee80211_sub_if_data *sdata, const u8 *addr); int sta_info_destroy_addr_bss(struct ieee80211_sub_if_data *sdata, - const u8 *addr); + const u8 *addr, int link_id); =20 void sta_info_recalc_tim(struct sta_info *sta); =20 --=20 2.40.0