diff mbox series

[2/2] wifi: rtl8xxxu: enable MFP support

Message ID 20240417093352.1840632-3-martin.kaistra@linutronix.de (mailing list archive)
State Superseded
Delegated to: Ping-Ke Shih
Headers show
Series wifi: rtl8xxxu: WPA3 support | expand

Commit Message

Martin Kaistra April 17, 2024, 9:33 a.m. UTC
In order to connect to networks which require 802.11w, add the
MFP_CAPABLE flag and let mac80211 do the actual crypto in software.

When a robust management frame is received, rx_dec->swdec is not set,
even though the HW did not decrypt it. Extend the check and don't set
RX_FLAG_DECRYPTED for these frames in order to use SW decryption.

Use the security flag in the RX descriptor for this purpose, like it is
done in the rtw88 driver.

Cc: stable@vger.kernel.org
Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h      | 9 +++++++++
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 7 +++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

Comments

Ping-Ke Shih April 18, 2024, 12:19 a.m. UTC | #1
Martin Kaistra <martin.kaistra@linutronix.de> wrote:

> 
> In order to connect to networks which require 802.11w, add the
> MFP_CAPABLE flag and let mac80211 do the actual crypto in software.
> 
> When a robust management frame is received, rx_dec->swdec is not set,
> even though the HW did not decrypt it. Extend the check and don't set
> RX_FLAG_DECRYPTED for these frames in order to use SW decryption.
> 
> Use the security flag in the RX descriptor for this purpose, like it is
> done in the rtw88 driver.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>

I would like to change subject to
"wifi: rtl8xxxu: enable MFP support with security flag of RX descriptor",
because the same subject as former patch cause confusing. I can change that
during committing. 

Others are good to me.
Martin Kaistra April 18, 2024, 6:47 a.m. UTC | #2
Am 18.04.24 um 02:19 schrieb Ping-Ke Shih:
> Martin Kaistra <martin.kaistra@linutronix.de> wrote:
> 
>>
>> In order to connect to networks which require 802.11w, add the
>> MFP_CAPABLE flag and let mac80211 do the actual crypto in software.
>>
>> When a robust management frame is received, rx_dec->swdec is not set,
>> even though the HW did not decrypt it. Extend the check and don't set
>> RX_FLAG_DECRYPTED for these frames in order to use SW decryption.
>>
>> Use the security flag in the RX descriptor for this purpose, like it is
>> done in the rtw88 driver.
>>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
> 
> I would like to change subject to
> "wifi: rtl8xxxu: enable MFP support with security flag of RX descriptor",
> because the same subject as former patch cause confusing. I can change that
> during committing.
> 
> Others are good to me.
> 

ok, subject change is fine for me.
I just noticed though, that I named the enum "rtw_rx_desc_enc" instead of the 
probably more appropriate "rtl8xxxu_rx_desc_enc". Should I change that?

Martin
Ping-Ke Shih April 18, 2024, 6:54 a.m. UTC | #3
Martin Kaistra <martin.kaistra@linutronix.de> wrote:
> Am 18.04.24 um 02:19 schrieb Ping-Ke Shih:
> > Martin Kaistra <martin.kaistra@linutronix.de> wrote:
> >
> >>
> >> In order to connect to networks which require 802.11w, add the
> >> MFP_CAPABLE flag and let mac80211 do the actual crypto in software.
> >>
> >> When a robust management frame is received, rx_dec->swdec is not set,
> >> even though the HW did not decrypt it. Extend the check and don't set
> >> RX_FLAG_DECRYPTED for these frames in order to use SW decryption.
> >>
> >> Use the security flag in the RX descriptor for this purpose, like it is
> >> done in the rtw88 driver.
> >>
> >> Cc: stable@vger.kernel.org
> >> Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
> >
> > I would like to change subject to
> > "wifi: rtl8xxxu: enable MFP support with security flag of RX descriptor",
> > because the same subject as former patch cause confusing. I can change that
> > during committing.
> >
> > Others are good to me.
> >
> 
> ok, subject change is fine for me.
> I just noticed though, that I named the enum "rtw_rx_desc_enc" instead of the
> probably more appropriate "rtl8xxxu_rx_desc_enc". Should I change that?

I missed that. Please do it and change the subject by the way. Thanks.

Ping-Ke
diff mbox series

Patch

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
index fd92d23c43d91..4f2615dbfd0f0 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
@@ -122,6 +122,15 @@  enum rtl8xxxu_rx_type {
 	RX_TYPE_ERROR = -1
 };
 
+enum rtw_rx_desc_enc {
+	RX_DESC_ENC_NONE	= 0,
+	RX_DESC_ENC_WEP40	= 1,
+	RX_DESC_ENC_TKIP_WO_MIC	= 2,
+	RX_DESC_ENC_TKIP_MIC	= 3,
+	RX_DESC_ENC_AES		= 4,
+	RX_DESC_ENC_WEP104	= 5,
+};
+
 struct rtl8xxxu_rxdesc16 {
 #ifdef __LITTLE_ENDIAN
 	u32 pktlen:14;
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
index 4a49f8f9d80f2..b15a30a54259e 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
@@ -6473,7 +6473,8 @@  int rtl8xxxu_parse_rxdesc16(struct rtl8xxxu_priv *priv, struct sk_buff *skb)
 			rx_status->mactime = rx_desc->tsfl;
 			rx_status->flag |= RX_FLAG_MACTIME_START;
 
-			if (!rx_desc->swdec)
+			if (!rx_desc->swdec &&
+			    rx_desc->security != RX_DESC_ENC_NONE)
 				rx_status->flag |= RX_FLAG_DECRYPTED;
 			if (rx_desc->crc32)
 				rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
@@ -6578,7 +6579,8 @@  int rtl8xxxu_parse_rxdesc24(struct rtl8xxxu_priv *priv, struct sk_buff *skb)
 			rx_status->mactime = rx_desc->tsfl;
 			rx_status->flag |= RX_FLAG_MACTIME_START;
 
-			if (!rx_desc->swdec)
+			if (!rx_desc->swdec &&
+			    rx_desc->security != RX_DESC_ENC_NONE)
 				rx_status->flag |= RX_FLAG_DECRYPTED;
 			if (rx_desc->crc32)
 				rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
@@ -7998,6 +8000,7 @@  static int rtl8xxxu_probe(struct usb_interface *interface,
 	ieee80211_hw_set(hw, HAS_RATE_CONTROL);
 	ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
 	ieee80211_hw_set(hw, AMPDU_AGGREGATION);
+	ieee80211_hw_set(hw, MFP_CAPABLE);
 
 	wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);