From c71bfcbb7c0f7b65145acd70652b5ac457364855 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Tue, 24 Feb 2015 15:59:36 -0600 Subject: [PATCH] eapol: Decryption of packets changes affects size --- src/eapol.c | 10 ++++++++-- src/eapol.h | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/eapol.c b/src/eapol.c index 20fa6246..761642d1 100644 --- a/src/eapol.c +++ b/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, - 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); const uint8_t *key_data = frame->key_data; @@ -168,6 +169,9 @@ uint8_t *eapol_decrypt_key_data(const uint8_t *kek, break; } + if (decrypted_size) + *decrypted_size = expected_len; + return buf; error: @@ -583,6 +587,7 @@ void __eapol_rx_packet(int ifindex, const uint8_t *sta_addr, struct eapol_sm *sm; struct crypto_ptk *ptk; uint8_t *decrypted_key_data = NULL; + size_t decrypted_key_data_len; uint64_t replay_counter; 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) 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) return; } diff --git a/src/eapol.h b/src/eapol.h index c98e7e8f..3ef92871 100644 --- a/src/eapol.h +++ b/src/eapol.h @@ -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); 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);