diff options
Diffstat (limited to 'src/lib/libssl/d1_clnt.c')
-rw-r--r-- | src/lib/libssl/d1_clnt.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/lib/libssl/d1_clnt.c b/src/lib/libssl/d1_clnt.c index 3f47a3854b..b85908c733 100644 --- a/src/lib/libssl/d1_clnt.c +++ b/src/lib/libssl/d1_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_clnt.c,v 1.28 2014/07/11 09:24:44 beck Exp $ */ | 1 | /* $OpenBSD: d1_clnt.c,v 1.29 2014/07/11 22:57:25 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * DTLS implementation written by Nagendra Modadugu | 3 | * DTLS implementation written by Nagendra Modadugu |
4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. | 4 | * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. |
@@ -879,6 +879,8 @@ dtls1_get_hello_verify(SSL *s) | |||
879 | return (1); | 879 | return (1); |
880 | } | 880 | } |
881 | 881 | ||
882 | if (2 > n) | ||
883 | goto truncated; | ||
882 | data = (unsigned char *)s->init_msg; | 884 | data = (unsigned char *)s->init_msg; |
883 | 885 | ||
884 | if ((data[0] != (s->version >> 8)) || (data[1] != (s->version&0xff))) { | 886 | if ((data[0] != (s->version >> 8)) || (data[1] != (s->version&0xff))) { |
@@ -889,7 +891,11 @@ dtls1_get_hello_verify(SSL *s) | |||
889 | } | 891 | } |
890 | data += 2; | 892 | data += 2; |
891 | 893 | ||
894 | if (2 + 1 > n) | ||
895 | goto truncated; | ||
892 | cookie_len = *(data++); | 896 | cookie_len = *(data++); |
897 | if (2 + 1 + cookie_len > n) | ||
898 | goto truncated; | ||
893 | if (cookie_len > sizeof(s->d1->cookie)) { | 899 | if (cookie_len > sizeof(s->d1->cookie)) { |
894 | al = SSL_AD_ILLEGAL_PARAMETER; | 900 | al = SSL_AD_ILLEGAL_PARAMETER; |
895 | goto f_err; | 901 | goto f_err; |
@@ -901,6 +907,8 @@ dtls1_get_hello_verify(SSL *s) | |||
901 | s->d1->send_cookie = 1; | 907 | s->d1->send_cookie = 1; |
902 | return 1; | 908 | return 1; |
903 | 909 | ||
910 | truncated: | ||
911 | al = SSL_AD_DECODE_ERROR; | ||
904 | f_err: | 912 | f_err: |
905 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | 913 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
906 | return -1; | 914 | return -1; |