wifi: rtl8xxxu: enable MFP support with security flag of RX descriptor
[ Upstream commit cbfbb4ddbc8503478e0a138f9a31f61686cc5f11 ] 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> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://msgid.link/20240418071813.1883174-3-martin.kaistra@linutronix.de Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b30c9b1118
commit
1dbb1a3181
@ -121,6 +121,15 @@ enum rtl8xxxu_rx_type {
|
||||
RX_TYPE_ERROR = -1
|
||||
};
|
||||
|
||||
enum rtl8xxxu_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;
|
||||
|
@ -6319,7 +6319,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;
|
||||
@ -6419,7 +6420,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;
|
||||
@ -7654,6 +7656,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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user