WPA: Explicitly clear the buffer used for decrypting Key Data
When AES-WRAP was used to protect the EAPOL-Key Key Data field, this was decrypted using a temporary heap buffer with aes_unwrap(). That buffer was not explicitly cleared, so it was possible for the group keys to remain in memory unnecessarily until the allocated area was reused. Clean this up by clearing the temporary allocation explicitly before freeing it. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
a551da6aae
commit
cd5895e8c5
1 changed files with 2 additions and 2 deletions
|
@ -1670,14 +1670,14 @@ static int wpa_supplicant_decrypt_key_data(struct wpa_sm *sm,
|
||||||
}
|
}
|
||||||
if (aes_unwrap(sm->ptk.kek, sm->ptk.kek_len, *key_data_len / 8,
|
if (aes_unwrap(sm->ptk.kek, sm->ptk.kek_len, *key_data_len / 8,
|
||||||
key_data, buf)) {
|
key_data, buf)) {
|
||||||
os_free(buf);
|
bin_clear_free(buf, *key_data_len);
|
||||||
wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
|
wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
|
||||||
"WPA: AES unwrap failed - "
|
"WPA: AES unwrap failed - "
|
||||||
"could not decrypt EAPOL-Key key data");
|
"could not decrypt EAPOL-Key key data");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
os_memcpy(key_data, buf, *key_data_len);
|
os_memcpy(key_data, buf, *key_data_len);
|
||||||
os_free(buf);
|
bin_clear_free(buf, *key_data_len);
|
||||||
WPA_PUT_BE16(key->key_data_length, *key_data_len);
|
WPA_PUT_BE16(key->key_data_length, *key_data_len);
|
||||||
} else {
|
} else {
|
||||||
wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
|
wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
|
||||||
|
|
Loading…
Reference in a new issue