[v2 PATCH] mwifiex: parse key management suite from RSN IE

Subsystems: marvell mwifiex wireless driver, the rest

STALE3112d

4 messages, 3 authors, 2018-04-10 · open the first message on its own page

[v2 PATCH] mwifiex: parse key management suite from RSN IE

From: Xinming Hu <hidden>
Date: 2018-04-09 07:50:15

Association failed when using wpa_supplicant with
configuration key_mgmt=WPA-PSK-SHA256, and it is noticed
that wpa_supplicant set WLAN_AKM_SUITE_PSK_SHA256 in
RSN IE, but miss it in start_ap parameters.

This patch parse key management suite from RSN IE, in
case it is missed.

Signed-off-by: Xinming Hu <redacted>
---
v2: Cleanup code in v1
---
 drivers/net/wireless/marvell/mwifiex/fw.h      |  1 +
 drivers/net/wireless/marvell/mwifiex/main.h    | 10 +++
 drivers/net/wireless/marvell/mwifiex/uap_cmd.c | 86 ++++++++++++++++++--------
 3 files changed, 70 insertions(+), 27 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/fw.h b/drivers/net/wireless/marvell/mwifiex/fw.h
index 13cd58e9..2be3ce1 100644
--- a/drivers/net/wireless/marvell/mwifiex/fw.h
+++ b/drivers/net/wireless/marvell/mwifiex/fw.h
@@ -413,6 +413,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
 #define KEY_MGMT_NONE               0x04
 #define KEY_MGMT_PSK                0x02
 #define KEY_MGMT_EAP                0x01
+#define KEY_MGMT_PSK_SHA256         0x100
 #define CIPHER_TKIP                 0x04
 #define CIPHER_AES_CCMP             0x08
 #define VALID_CIPHER_BITMAP         0x0c
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index 598e58b..94b5935 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -364,6 +364,16 @@ struct ieee_types_generic {
 	u8 data[IEEE_MAX_IE_SIZE - sizeof(struct ieee_types_header)];
 } __packed;
 
+struct ieee_types_rsn {
+	struct ieee_types_header ieee_hdr;
+	u8  element_id;
+	u8  element_len;
+	u16 rsn_version;
+	u32 cipher_group;
+	u16 n_ciphers_pairwise;
+	u32 ciphers_pairwise[];
+} __packed;
+
 struct ieee_types_bss_co_2040 {
 	struct ieee_types_header ieee_hdr;
 	u8 bss_2040co;
diff --git a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
index 18f7d9b..0a27717 100644
--- a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
+++ b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
@@ -26,9 +26,14 @@
  */
 int mwifiex_set_secure_params(struct mwifiex_private *priv,
 			      struct mwifiex_uap_bss_param *bss_config,
-			      struct cfg80211_ap_settings *params) {
+			      struct cfg80211_ap_settings *params)
+{
 	int i;
 	struct mwifiex_wep_key wep_key;
+	const struct ieee_types_rsn *rsn_ie = NULL;
+	const u8 *ie = NULL;
+	u16 n_akm_suites;
+	u32 *akm_suites;
 
 	if (!params->privacy) {
 		bss_config->protocol = PROTOCOL_NO_SECURITY;
@@ -58,36 +63,63 @@ int mwifiex_set_secure_params(struct mwifiex_private *priv,
 
 	bss_config->key_mgmt_operation |= KEY_MGMT_ON_HOST;
 
-	for (i = 0; i < params->crypto.n_akm_suites; i++) {
-		switch (params->crypto.akm_suites[i]) {
-		case WLAN_AKM_SUITE_8021X:
-			if (params->crypto.wpa_versions &
-			    NL80211_WPA_VERSION_1) {
-				bss_config->protocol = PROTOCOL_WPA;
-				bss_config->key_mgmt = KEY_MGMT_EAP;
-			}
-			if (params->crypto.wpa_versions &
-			    NL80211_WPA_VERSION_2) {
-				bss_config->protocol |= PROTOCOL_WPA2;
-				bss_config->key_mgmt = KEY_MGMT_EAP;
+	if (params->crypto.wpa_versions & NL80211_WPA_VERSION_1)
+		bss_config->protocol = PROTOCOL_WPA;
+
+	if (params->crypto.wpa_versions & NL80211_WPA_VERSION_2)
+		bss_config->protocol |= PROTOCOL_WPA2;
+
+	if (params->crypto.wpa_versions &
+	    (NL80211_WPA_VERSION_1 | NL80211_WPA_VERSION_2)) {
+		for (i = 0; i < params->crypto.n_akm_suites; i++) {
+			switch (params->crypto.akm_suites[i]) {
+			case WLAN_AKM_SUITE_8021X:
+					bss_config->key_mgmt = KEY_MGMT_EAP;
+				break;
+			case WLAN_AKM_SUITE_PSK:
+					bss_config->key_mgmt = KEY_MGMT_PSK;
+				break;
+			case WLAN_AKM_SUITE_PSK_SHA256:
+					bss_config->key_mgmt =
+							KEY_MGMT_PSK_SHA256;
+				break;
+			default:
+				break;
 			}
-			break;
-		case WLAN_AKM_SUITE_PSK:
-			if (params->crypto.wpa_versions &
-			    NL80211_WPA_VERSION_1) {
-				bss_config->protocol = PROTOCOL_WPA;
-				bss_config->key_mgmt = KEY_MGMT_PSK;
-			}
-			if (params->crypto.wpa_versions &
-			    NL80211_WPA_VERSION_2) {
-				bss_config->protocol |= PROTOCOL_WPA2;
-				bss_config->key_mgmt = KEY_MGMT_PSK;
+		}
+
+		ie = cfg80211_find_ie(WLAN_EID_RSN, params->beacon.tail,
+				      params->beacon.tail_len);
+
+		/* Try to get key management suites from RSN IE */
+		if (!bss_config->key_mgmt && ie) {
+			rsn_ie = (struct ieee_types_rsn *)ie;
+			ie = (u8 *)(rsn_ie->ciphers_pairwise +
+				    rsn_ie->n_ciphers_pairwise);
+			n_akm_suites = *((u16 *)ie);
+			akm_suites = (u32 *)(ie + sizeof(n_akm_suites));
+
+			for (i = 0; i < n_akm_suites; i++) {
+				switch (akm_suites[i]) {
+				case WLAN_AKM_SUITE_8021X:
+						bss_config->key_mgmt =
+								KEY_MGMT_EAP;
+					break;
+				case WLAN_AKM_SUITE_PSK:
+						bss_config->key_mgmt =
+								KEY_MGMT_PSK;
+					break;
+				case WLAN_AKM_SUITE_PSK_SHA256:
+						bss_config->key_mgmt =
+							KEY_MGMT_PSK_SHA256;
+					break;
+				default:
+					break;
+				}
 			}
-			break;
-		default:
-			break;
 		}
 	}
+
 	for (i = 0; i < params->crypto.n_ciphers_pairwise; i++) {
 		switch (params->crypto.ciphers_pairwise[i]) {
 		case WLAN_CIPHER_SUITE_WEP40:
-- 
1.9.1

Re: [v2 PATCH] mwifiex: parse key management suite from RSN IE

From: Kalle Valo <hidden>
Date: 2018-04-09 10:50:45

Xinming Hu [off-list ref] writes:
Association failed when using wpa_supplicant with
configuration key_mgmt=WPA-PSK-SHA256, and it is noticed
that wpa_supplicant set WLAN_AKM_SUITE_PSK_SHA256 in
RSN IE, but miss it in start_ap parameters.

This patch parse key management suite from RSN IE, in
case it is missed.

Signed-off-by: Xinming Hu <redacted>
Shouldn't you fix wpa_supplicant instead of adding a workaround to the
driver?

-- 
Kalle Valo

Re: [v2 PATCH] mwifiex: parse key management suite from RSN IE

From: Xinming Hu <hidden>
Date: 2018-04-10 02:19:39

SGkgS2FsbGUsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogS2FsbGUg
VmFsbyBbbWFpbHRvOmt2YWxvQGNvZGVhdXJvcmEub3JnXQ0KPiBTZW50OiAyMDE4xOo01MI5yNUg
MTg6NTENCj4gVG86IFhpbm1pbmcgSHUgPGh1eG1AbWFydmVsbC5jb20+DQo+IENjOiBMaW51eCBX
aXJlbGVzcyA8bGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnPjsgQnJpYW4gTm9ycmlzDQo+
IDxicmlhbm5vcnJpc0BjaHJvbWl1bS5vcmc+OyBEbWl0cnkgVG9yb2tob3YgPGR0b3JAZ29vZ2xl
LmNvbT47DQo+IHJhamF0amFAZ29vZ2xlLmNvbTsgWmhpeXVhbiBZYW5nIDx5YW5nenlAbWFydmVs
bC5jb20+OyBUaW0gU29uZw0KPiA8c29uZ3Rhb0BtYXJ2ZWxsLmNvbT47IENhdGh5IEx1byA8Y2x1
b0BtYXJ2ZWxsLmNvbT47IEphbWVzIENhbw0KPiA8amNhb0BtYXJ2ZWxsLmNvbT47IEdhbmFwYXRo
aSBCaGF0IDxnYmhhdEBtYXJ2ZWxsLmNvbT47IEVsbGllIFJlZXZlcw0KPiA8ZWxsaWVyZXZ2ZXNA
Z21haWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW3YyIFBBVENIXSBtd2lmaWV4OiBwYXJzZSBrZXkg
bWFuYWdlbWVudCBzdWl0ZSBmcm9tIFJTTiBJRQ0KPiANCj4gWGlubWluZyBIdSA8aHV4bUBtYXJ2
ZWxsLmNvbT4gd3JpdGVzOg0KPiANCj4gPiBBc3NvY2lhdGlvbiBmYWlsZWQgd2hlbiB1c2luZyB3
cGFfc3VwcGxpY2FudCB3aXRoIGNvbmZpZ3VyYXRpb24NCj4gPiBrZXlfbWdtdD1XUEEtUFNLLVNI
QTI1NiwgYW5kIGl0IGlzIG5vdGljZWQgdGhhdCB3cGFfc3VwcGxpY2FudCBzZXQNCj4gPiBXTEFO
X0FLTV9TVUlURV9QU0tfU0hBMjU2IGluIFJTTiBJRSwgYnV0IG1pc3MgaXQgaW4gc3RhcnRfYXAN
Cj4gPiBwYXJhbWV0ZXJzLg0KPiA+DQo+ID4gVGhpcyBwYXRjaCBwYXJzZSBrZXkgbWFuYWdlbWVu
dCBzdWl0ZSBmcm9tIFJTTiBJRSwgaW4gY2FzZSBpdCBpcw0KPiA+IG1pc3NlZC4NCj4gPg0KPiA+
IFNpZ25lZC1vZmYtYnk6IFhpbm1pbmcgSHUgPGh1eG1AbWFydmVsbC5jb20+DQo+IA0KPiBTaG91
bGRuJ3QgeW91IGZpeCB3cGFfc3VwcGxpY2FudCBpbnN0ZWFkIG9mIGFkZGluZyBhIHdvcmthcm91
bmQgdG8gdGhlIGRyaXZlcj8NCj4gDQoNClllcywgSSBhbSBwcmVwYXJpbmcgYSB3cGFfc3VwcGxp
Y2FudCBmaXggb24gdGhpcy4NCkV2ZW4gc28sIGRyaXZlciBmaXggaXMgc3RpbGwgbmVlZCB0byBj
b21wYXRpYmxlIHdpdGggb2xkIHdwYV9zdXBwbGljYW50IHN0YWJsZSByZWxlYXNlDQoNClJlZ2Fy
ZHMsDQpTaW1vbg0KDQo+IC0tDQo+IEthbGxlIFZhbG8NCg==

Re: [v2 PATCH] mwifiex: parse key management suite from RSN IE

From: Dan Williams <hidden>
Date: 2018-04-10 14:35:27

On Tue, 2018-04-10 at 02:19 +0000, Xinming Hu wrote:
Hi Kalle,
quoted
-----Original Message-----
From: Kalle Valo [mailto:kvalo@codeaurora.org]
Sent: 2018年4月9日 18:51
To: Xinming Hu <redacted>
Cc: Linux Wireless <redacted>; Brian Norris
[off-list ref]; Dmitry Torokhov [off-list ref];
rajatja@google.com; Zhiyuan Yang [off-list ref]; Tim Song
[off-list ref]; Cathy Luo [off-list ref]; James Cao
[off-list ref]; Ganapathi Bhat [off-list ref]; Ellie
Reeves
[off-list ref]
Subject: Re: [v2 PATCH] mwifiex: parse key management suite from
RSN IE

Xinming Hu [off-list ref] writes:
quoted
Association failed when using wpa_supplicant with configuration
key_mgmt=WPA-PSK-SHA256, and it is noticed that wpa_supplicant
set
WLAN_AKM_SUITE_PSK_SHA256 in RSN IE, but miss it in start_ap
parameters.

This patch parse key management suite from RSN IE, in case it is
missed.

Signed-off-by: Xinming Hu <redacted>
Shouldn't you fix wpa_supplicant instead of adding a workaround to
the driver?
Yes, I am preparing a wpa_supplicant fix on this.
Even so, driver fix is still need to compatible with old
wpa_supplicant stable release
Typically the kernel does not add hacks to work around userspace
software bugs.  The userspace software needs to be fixed and upgraded.

Dan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help