summaryrefslogtreecommitdiffstats
path: root/package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch')
-rw-r--r--package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch89
1 files changed, 89 insertions, 0 deletions
diff --git a/package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch b/package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch
new file mode 100644
index 000000000..231498e99
--- /dev/null
+++ b/package/wpa_supplicant/wpa_supplicant-0.7.3-nl80211-cipher-suites.patch
@@ -0,0 +1,89 @@
+From d0f3f451f0002339ad75b43e79f1322f2e2e4ed1 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <jouni.malinen@atheros.com>
+Date: Mon, 13 Dec 2010 21:08:53 +0200
+Subject: [PATCH] nl80211: Set cipher suites when using user space SME
+
+Previously, pairwise and group cipher suites were configured only
+when kernel SME (nl80211 connect API) was used. However, mac80211
+needs this information even in the user space SME case for one
+thing: to disable HT when TKIP/WEP is used. Add
+NL80211_ATTR_CIPHER_SUITES_PAIRWISE to fix this special case with
+user space SME. This allows mac80211 to disable HT properly when
+the AP is configured with configuration that is not allowed.
+(cherry picked from commit aca016054885c17d58c41888698761f2e1ce2b39)
+---
+ src/drivers/driver_nl80211.c | 44 ++++++++++++++++++++++++++++++++++++++++++
+ wpa_supplicant/sme.c | 2 +
+ 2 files changed, 46 insertions(+), 0 deletions(-)
+
+diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
+index 364158c..fb75c2e 100644
+--- a/src/drivers/driver_nl80211.c
++++ b/src/drivers/driver_nl80211.c
+@@ -3940,6 +3940,50 @@ static int wpa_driver_nl80211_associate(
+ NLA_PUT(msg, NL80211_ATTR_IE, params->wpa_ie_len,
+ params->wpa_ie);
+
++ if (params->pairwise_suite != CIPHER_NONE) {
++ int cipher;
++
++ switch (params->pairwise_suite) {
++ case CIPHER_WEP40:
++ cipher = WLAN_CIPHER_SUITE_WEP40;
++ break;
++ case CIPHER_WEP104:
++ cipher = WLAN_CIPHER_SUITE_WEP104;
++ break;
++ case CIPHER_CCMP:
++ cipher = WLAN_CIPHER_SUITE_CCMP;
++ break;
++ case CIPHER_TKIP:
++ default:
++ cipher = WLAN_CIPHER_SUITE_TKIP;
++ break;
++ }
++ wpa_printf(MSG_DEBUG, " * pairwise=0x%x\n", cipher);
++ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITES_PAIRWISE, cipher);
++ }
++
++ if (params->group_suite != CIPHER_NONE) {
++ int cipher;
++
++ switch (params->group_suite) {
++ case CIPHER_WEP40:
++ cipher = WLAN_CIPHER_SUITE_WEP40;
++ break;
++ case CIPHER_WEP104:
++ cipher = WLAN_CIPHER_SUITE_WEP104;
++ break;
++ case CIPHER_CCMP:
++ cipher = WLAN_CIPHER_SUITE_CCMP;
++ break;
++ case CIPHER_TKIP:
++ default:
++ cipher = WLAN_CIPHER_SUITE_TKIP;
++ break;
++ }
++ wpa_printf(MSG_DEBUG, " * group=0x%x\n", cipher);
++ NLA_PUT_U32(msg, NL80211_ATTR_CIPHER_SUITE_GROUP, cipher);
++ }
++
+ #ifdef CONFIG_IEEE80211W
+ if (params->mgmt_frame_protection == MGMT_FRAME_PROTECTION_REQUIRED)
+ NLA_PUT_U32(msg, NL80211_ATTR_USE_MFP, NL80211_MFP_REQUIRED);
+diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
+index 5604e97..878bbf0 100644
+--- a/wpa_supplicant/sme.c
++++ b/wpa_supplicant/sme.c
+@@ -333,6 +333,8 @@ void sme_associate(struct wpa_supplicant *wpa_s, enum wpas_mode mode,
+ params.wpa_ie = wpa_s->sme.assoc_req_ie_len ?
+ wpa_s->sme.assoc_req_ie : NULL;
+ params.wpa_ie_len = wpa_s->sme.assoc_req_ie_len;
++ params.pairwise_suite = cipher_suite2driver(wpa_s->pairwise_cipher);
++ params.group_suite = cipher_suite2driver(wpa_s->group_cipher);
+ #ifdef CONFIG_IEEE80211R
+ if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies) {
+ params.wpa_ie = wpa_s->sme.ft_ies;
+--
+1.7.4-rc1
+