mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 05:21:51 +08:00
Avoid double free when processing DTLS packets.
The |item| variable, in both of these cases, may contain a pointer to a
|pitem| structure within |s->d1->buffered_messages|. It was being freed
in the error case while still being in |buffered_messages|. When the
error later caused the |SSL*| to be destroyed, the item would be double
freed.
Thanks to Wah-Teh Chang for spotting that the fix in 1632ef74
was
inconsistent with the other error paths (but correct).
Fixes CVE-2014-3505
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Emilia Käsper <emilia@openssl.org>
This commit is contained in:
parent
a46149c672
commit
bff1ce4e6a
@ -698,8 +698,7 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok)
|
||||
return DTLS1_HM_FRAGMENT_RETRY;
|
||||
|
||||
err:
|
||||
if (frag != NULL) dtls1_hm_fragment_free(frag);
|
||||
if (item != NULL) OPENSSL_free(item);
|
||||
if (frag != NULL && item == NULL) dtls1_hm_fragment_free(frag);
|
||||
*ok = 0;
|
||||
return i;
|
||||
}
|
||||
@ -783,8 +782,7 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok)
|
||||
return DTLS1_HM_FRAGMENT_RETRY;
|
||||
|
||||
err:
|
||||
if ( frag != NULL) dtls1_hm_fragment_free(frag);
|
||||
if ( item != NULL) OPENSSL_free(item);
|
||||
if (frag != NULL && item == NULL) dtls1_hm_fragment_free(frag);
|
||||
*ok = 0;
|
||||
return i;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user