mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 21:22:37 +01:00
eapol: Decryption of packets changes affects size
This commit is contained in:
parent
b9fd2a8a48
commit
c71bfcbb7c
10
src/eapol.c
10
src/eapol.c
@ -119,7 +119,8 @@ bool eapol_verify_mic(const uint8_t *kck, const struct eapol_key *frame)
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *eapol_decrypt_key_data(const uint8_t *kek,
|
uint8_t *eapol_decrypt_key_data(const uint8_t *kek,
|
||||||
const struct eapol_key *frame)
|
const struct eapol_key *frame,
|
||||||
|
size_t *decrypted_size)
|
||||||
{
|
{
|
||||||
size_t key_data_len = L_BE16_TO_CPU(frame->key_data_len);
|
size_t key_data_len = L_BE16_TO_CPU(frame->key_data_len);
|
||||||
const uint8_t *key_data = frame->key_data;
|
const uint8_t *key_data = frame->key_data;
|
||||||
@ -168,6 +169,9 @@ uint8_t *eapol_decrypt_key_data(const uint8_t *kek,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (decrypted_size)
|
||||||
|
*decrypted_size = expected_len;
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@ -583,6 +587,7 @@ void __eapol_rx_packet(int ifindex, const uint8_t *sta_addr,
|
|||||||
struct eapol_sm *sm;
|
struct eapol_sm *sm;
|
||||||
struct crypto_ptk *ptk;
|
struct crypto_ptk *ptk;
|
||||||
uint8_t *decrypted_key_data = NULL;
|
uint8_t *decrypted_key_data = NULL;
|
||||||
|
size_t decrypted_key_data_len;
|
||||||
uint64_t replay_counter;
|
uint64_t replay_counter;
|
||||||
|
|
||||||
ek = eapol_key_validate(frame, len);
|
ek = eapol_key_validate(frame, len);
|
||||||
@ -636,7 +641,8 @@ void __eapol_rx_packet(int ifindex, const uint8_t *sta_addr,
|
|||||||
if (!sm->have_snonce)
|
if (!sm->have_snonce)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
decrypted_key_data = eapol_decrypt_key_data(ptk->kek, ek);
|
decrypted_key_data = eapol_decrypt_key_data(ptk->kek, ek,
|
||||||
|
&decrypted_key_data_len);
|
||||||
if (!decrypted_key_data)
|
if (!decrypted_key_data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,8 @@ bool eapol_calculate_mic(const uint8_t *kck, const struct eapol_key *frame,
|
|||||||
bool eapol_verify_mic(const uint8_t *kck, const struct eapol_key *frame);
|
bool eapol_verify_mic(const uint8_t *kck, const struct eapol_key *frame);
|
||||||
|
|
||||||
uint8_t *eapol_decrypt_key_data(const uint8_t *kek,
|
uint8_t *eapol_decrypt_key_data(const uint8_t *kek,
|
||||||
const struct eapol_key *frame);
|
const struct eapol_key *frame,
|
||||||
|
size_t *decrypted_size);
|
||||||
|
|
||||||
const struct eapol_key *eapol_key_validate(const uint8_t *frame, size_t len);
|
const struct eapol_key *eapol_key_validate(const uint8_t *frame, size_t len);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user