eap-pwd: add length checks for fragmented packets

This commit is contained in:
James Prestwood 2022-01-19 10:13:02 -08:00 committed by Denis Kenzior
parent e500511490
commit ac78076663
1 changed files with 14 additions and 0 deletions

View File

@ -669,6 +669,14 @@ static void eap_pwd_handle_request(struct eap_state *eap,
/* remove length of Total-Length parameter (2) */
pwd->rx_frag_total = l_get_be16(pkt + 1) - 2;
if (pwd->rx_frag_total < len - 2) {
l_error("Total-Length too small for remaining length");
pwd->rx_frag_total = 0;
return;
}
pwd->rx_frag_buf = l_malloc(pwd->rx_frag_total);
/* skip copying Total-Length for easier processing later */
@ -687,6 +695,12 @@ static void eap_pwd_handle_request(struct eap_state *eap,
/* more rx fragments */
if (pwd->rx_frag_buf) {
if (pwd->rx_frag_total - pwd->rx_frag_count <
(uint16_t) len - 1) {
l_error("Not enough room for fragment (%zu)", len - 1);
return;
}
/* continue building packet (not including PWD-Exch byte) */
memcpy(pwd->rx_frag_buf + pwd->rx_frag_count, pkt + 1, len - 1);
pwd->rx_frag_count += (len - 1);