2024-04-17 09:34:13

by Martin Kaistra

[permalink] [raw]
Subject: [PATCH 0/2] wifi: rtl8xxxu: WPA3 support

As discussed in [1], here are the new patches for supporting WPA3 SAE in
the rtl8xxxu driver. Tested with 8188fu.

[1] https://lore.kernel.org/linux-wireless/[email protected]/

Martin Kaistra (2):
Revert "wifi: rtl8xxxu: enable MFP support"
wifi: rtl8xxxu: enable MFP support

drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h | 9 +++++++++
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 6 ++----
2 files changed, 11 insertions(+), 4 deletions(-)

--
2.39.2



2024-04-17 09:34:13

by Martin Kaistra

[permalink] [raw]
Subject: [PATCH 1/2] Revert "wifi: rtl8xxxu: enable MFP support"

This reverts commit 77f5924fc41c243e907c80ce2576902d3a9cb336.

There is a more elegant solution to check for not decrypted frames,
which is to check the security flag in the RX descriptor.

Revert commit 77f5924fc41c ("wifi: rtl8xxxu: enable MFP support") in
favor of this to be able to send it to stable.

Signed-off-by: Martin Kaistra <[email protected]>
---
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
index 870bd952f5902..4a49f8f9d80f2 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
@@ -6473,9 +6473,7 @@ 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 &&
- !(_ieee80211_is_robust_mgmt_frame(hdr) &&
- ieee80211_has_protected(hdr->frame_control)))
+ if (!rx_desc->swdec)
rx_status->flag |= RX_FLAG_DECRYPTED;
if (rx_desc->crc32)
rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
@@ -6580,9 +6578,7 @@ 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 &&
- !(_ieee80211_is_robust_mgmt_frame(hdr) &&
- ieee80211_has_protected(hdr->frame_control)))
+ if (!rx_desc->swdec)
rx_status->flag |= RX_FLAG_DECRYPTED;
if (rx_desc->crc32)
rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
@@ -8002,7 +7998,6 @@ 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);

--
2.39.2


2024-04-17 09:34:18

by Martin Kaistra

[permalink] [raw]
Subject: [PATCH 2/2] wifi: rtl8xxxu: enable MFP support

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: [email protected]
Signed-off-by: Martin Kaistra <[email protected]>
---
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h | 9 +++++++++
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 7 +++++--
2 files changed, 14 insertions(+), 2 deletions(-)

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);

--
2.39.2


2024-04-18 00:20:15

by Ping-Ke Shih

[permalink] [raw]
Subject: RE: [PATCH 2/2] wifi: rtl8xxxu: enable MFP support

Martin Kaistra <[email protected]> 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: [email protected]
> Signed-off-by: Martin Kaistra <[email protected]>

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.


2024-04-18 06:48:13

by Martin Kaistra

[permalink] [raw]
Subject: Re: [PATCH 2/2] wifi: rtl8xxxu: enable MFP support

Am 18.04.24 um 02:19 schrieb Ping-Ke Shih:
> Martin Kaistra <[email protected]> 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: [email protected]
>> Signed-off-by: Martin Kaistra <[email protected]>
>
> 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

2024-04-18 06:54:33

by Ping-Ke Shih

[permalink] [raw]
Subject: RE: [PATCH 2/2] wifi: rtl8xxxu: enable MFP support

Martin Kaistra <[email protected]> wrote:
> Am 18.04.24 um 02:19 schrieb Ping-Ke Shih:
> > Martin Kaistra <[email protected]> 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: [email protected]
> >> Signed-off-by: Martin Kaistra <[email protected]>
> >
> > 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