]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
EAP-pwd peer: Fix reassembly buffer handling
authorJouni Malinen <jouni@codeaurora.org>
Tue, 16 Apr 2019 23:21:20 +0000 (02:21 +0300)
committerJouni Malinen <j@w1.fi>
Wed, 17 Apr 2019 10:24:37 +0000 (13:24 +0300)
Unexpected fragment might result in data->inbuf not being allocated
before processing and that could have resulted in NULL pointer
dereference. Fix that by explicitly checking for data->inbuf to be
available before using it.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/eap_peer/eap_pwd.c

index 46894a52fec7d970e7ca7384f4b88f7b9404ccd3..76fcad4a50e0d6dcf8abef6f47bac0c47b9a7284 100644 (file)
@@ -932,6 +932,13 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
         * buffer and ACK the fragment
         */
        if (EAP_PWD_GET_MORE_BIT(lm_exch) || data->in_frag_pos) {
+               if (!data->inbuf) {
+                       wpa_printf(MSG_DEBUG,
+                                  "EAP-pwd: No buffer for reassembly");
+                       ret->methodState = METHOD_DONE;
+                       ret->decision = DECISION_FAIL;
+                       return NULL;
+               }
                data->in_frag_pos += len;
                if (data->in_frag_pos > wpabuf_size(data->inbuf)) {
                        wpa_printf(MSG_INFO, "EAP-pwd: Buffer overflow attack "
@@ -958,7 +965,7 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
        /*
         * we're buffering and this is the last fragment
         */
-       if (data->in_frag_pos) {
+       if (data->in_frag_pos && data->inbuf) {
                wpa_printf(MSG_DEBUG, "EAP-pwd: Last fragment, %d bytes",
                           (int) len);
                pos = wpabuf_head_u8(data->inbuf);