[PATCH 3/4] Do not encrypt EAPOL keys

Eugene Krasnikov k.eugene.e at gmail.com
Fri Jul 5 02:45:06 EDT 2013


Keys are coming in data frames. So do not encrypt
data packets until key exchange is finished.

Signed-off-by: Eugene Krasnikov <k.eugene.e at gmail.com>
---
 main.c    | 2 ++
 txrx.c    | 3 ++-
 wcn36xx.h | 1 +
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/main.c b/main.c
index be094db..f3a6fb9 100644
--- a/main.c
+++ b/main.c
@@ -394,6 +394,7 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 		}
 
 		if (IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags) {
+			wcn->is_data_encrypted = true;
 			/* Reconfigure bss with encrypt_type */
 			wcn36xx_smd_config_bss(wcn,
 					       NL80211_IFTYPE_STATION,
@@ -420,6 +421,7 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
 				wcn->encrypt_type,
 				key_conf->keyidx);
 		} else {
+			wcn->is_data_encrypted = false;
 			/* do not remove key if disassociated */
 			if (wcn->aid)
 				wcn36xx_smd_remove_stakey(wcn,
diff --git a/txrx.c b/txrx.c
index 12209bc..4f6246f 100644
--- a/txrx.c
+++ b/txrx.c
@@ -123,7 +123,8 @@ void wcn36xx_fill_tx_bd(struct wcn36xx *wcn, struct wcn36xx_tx_bd *bd,
 		bd->queue_id = 0;
 		bd->sta_index = wcn->current_vif->sta_index;
 		bd->dpu_desc_idx = wcn->current_vif->dpu_desc_index;
-		if (ieee80211_is_nullfunc(hdr->frame_control))
+		if (ieee80211_is_nullfunc(hdr->frame_control) ||
+		    !wcn->is_data_encrypted)
 			bd->dpu_ne = 1;
 
 	} else {
diff --git a/wcn36xx.h b/wcn36xx.h
index 2c72349..fd591ba 100644
--- a/wcn36xx.h
+++ b/wcn36xx.h
@@ -129,6 +129,7 @@ struct wcn36xx {
 	u8			wlan_version[WCN36XX_HAL_VERSION_LENGTH + 1];
 
 	bool			beacon_enable;
+	bool			is_data_encrypted;
 	/* IRQs */
 	int			tx_irq;
 	int			rx_irq;
-- 
1.7.11.3




More information about the wcn36xx mailing list