iwlegacy: don't mess up the SCD when removing a key
When we remove a key, we put a key index which was supposed to tell the fw that we are actually removing the key. But instead the fw took that index as a valid index and messed up the SRAM of the device. This memory corruption on the device mangled the data of the SCD. The impact on the user is that SCD queue 2 got stuck after having removed keys. Reported-by: Paul Bolle <pebolle@tiscali.nl> Cc: stable@vger.kernel.org Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
c2ca7d92ed
commit
b48d966526
|
@ -3405,7 +3405,7 @@ il4965_remove_dynamic_key(struct il_priv *il,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (il->stations[sta_id].sta.key.key_offset == WEP_INVALID_OFFSET) {
|
||||
if (il->stations[sta_id].sta.key.key_flags & STA_KEY_FLG_INVALID) {
|
||||
IL_WARN("Removing wrong key %d 0x%x\n", keyconf->keyidx,
|
||||
key_flags);
|
||||
spin_unlock_irqrestore(&il->sta_lock, flags);
|
||||
|
@ -3420,7 +3420,7 @@ il4965_remove_dynamic_key(struct il_priv *il,
|
|||
memset(&il->stations[sta_id].sta.key, 0, sizeof(struct il4965_keyinfo));
|
||||
il->stations[sta_id].sta.key.key_flags =
|
||||
STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID;
|
||||
il->stations[sta_id].sta.key.key_offset = WEP_INVALID_OFFSET;
|
||||
il->stations[sta_id].sta.key.key_offset = keyconf->hw_key_idx;
|
||||
il->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK;
|
||||
il->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
|
||||
|
||||
|
|
Loading…
Reference in New Issue