diff options
author | jsing <> | 2014-06-05 16:53:15 +0000 |
---|---|---|
committer | jsing <> | 2014-06-05 16:53:15 +0000 |
commit | a5eaf8ae8a59227ec7a51920b1562ab92c770aae (patch) | |
tree | cd83aa9f3f4660d0c8a28f4eca0af3f6a4891618 /src/lib/libssl/d1_both.c | |
parent | 709e767ee1bae902c542e5d14cba5920b5b85177 (diff) | |
download | openbsd-a5eaf8ae8a59227ec7a51920b1562ab92c770aae.tar.gz openbsd-a5eaf8ae8a59227ec7a51920b1562ab92c770aae.tar.bz2 openbsd-a5eaf8ae8a59227ec7a51920b1562ab92c770aae.zip |
Avoid a buffer overflow that can be triggered by sending specially crafted
DTLS fragments.
Fix for CVE-2014-0195, from OpenSSL.
Reported to OpenSSL by Juri Aedla.
ok deraadt@ beck@
Diffstat (limited to 'src/lib/libssl/d1_both.c')
-rw-r--r-- | src/lib/libssl/d1_both.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c index 8e2843625b..3674ed6046 100644 --- a/src/lib/libssl/d1_both.c +++ b/src/lib/libssl/d1_both.c | |||
@@ -586,8 +586,14 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
586 | memcpy(&(frag->msg_header), msg_hdr, sizeof(*msg_hdr)); | 586 | memcpy(&(frag->msg_header), msg_hdr, sizeof(*msg_hdr)); |
587 | frag->msg_header.frag_len = frag->msg_header.msg_len; | 587 | frag->msg_header.frag_len = frag->msg_header.msg_len; |
588 | frag->msg_header.frag_off = 0; | 588 | frag->msg_header.frag_off = 0; |
589 | } else | 589 | } else { |
590 | frag = (hm_fragment*)item->data; | 590 | frag = (hm_fragment*)item->data; |
591 | if (frag->msg_header.msg_len != msg_hdr->msg_len) { | ||
592 | item = NULL; | ||
593 | frag = NULL; | ||
594 | goto err; | ||
595 | } | ||
596 | } | ||
591 | 597 | ||
592 | /* If message is already reassembled, this must be a | 598 | /* If message is already reassembled, this must be a |
593 | * retransmit and can be dropped. | 599 | * retransmit and can be dropped. |