| From foo@baz Sun May 27 17:33:38 CEST 2018 |
| From: Sara Sharon <sara.sharon@intel.com> |
| Date: Tue, 2 Jan 2018 11:40:15 +0200 |
| Subject: iwlwifi: mvm: fix TX of CCMP 256 |
| |
| From: Sara Sharon <sara.sharon@intel.com> |
| |
| [ Upstream commit de04d4fbf87b769ab18c480e4f020c53e74bbdd2 ] |
| |
| We don't have enough room in the TX command for a CCMP 256 |
| key, and need to use key from table. |
| |
| Fixes: 3264bf032bd9 ("[BUGFIX] iwlwifi: mvm: Fix CCMP IV setting") |
| Signed-off-by: Sara Sharon <sara.sharon@intel.com> |
| Signed-off-by: Luca Coelho <luciano.coelho@intel.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c |
| +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c |
| @@ -406,11 +406,11 @@ static void iwl_mvm_set_tx_cmd_crypto(st |
| { |
| struct ieee80211_key_conf *keyconf = info->control.hw_key; |
| u8 *crypto_hdr = skb_frag->data + hdrlen; |
| + enum iwl_tx_cmd_sec_ctrl type = TX_CMD_SEC_CCM; |
| u64 pn; |
| |
| switch (keyconf->cipher) { |
| case WLAN_CIPHER_SUITE_CCMP: |
| - case WLAN_CIPHER_SUITE_CCMP_256: |
| iwl_mvm_set_tx_cmd_ccmp(info, tx_cmd); |
| iwl_mvm_set_tx_cmd_pn(info, crypto_hdr); |
| break; |
| @@ -434,13 +434,16 @@ static void iwl_mvm_set_tx_cmd_crypto(st |
| break; |
| case WLAN_CIPHER_SUITE_GCMP: |
| case WLAN_CIPHER_SUITE_GCMP_256: |
| + type = TX_CMD_SEC_GCMP; |
| + /* Fall through */ |
| + case WLAN_CIPHER_SUITE_CCMP_256: |
| /* TODO: Taking the key from the table might introduce a race |
| * when PTK rekeying is done, having an old packets with a PN |
| * based on the old key but the message encrypted with a new |
| * one. |
| * Need to handle this. |
| */ |
| - tx_cmd->sec_ctl |= TX_CMD_SEC_GCMP | TX_CMD_SEC_KEY_FROM_TABLE; |
| + tx_cmd->sec_ctl |= type | TX_CMD_SEC_KEY_FROM_TABLE; |
| tx_cmd->key[0] = keyconf->hw_key_idx; |
| iwl_mvm_set_tx_cmd_pn(info, crypto_hdr); |
| break; |