summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-05-29 17:05:01 +0100
committerMatt Caswell <matt@openssl.org>2015-06-01 00:30:56 +0100
commit8744ba5e4260ccb47daae3c45bb8e7b5bac42cd3 (patch)
tree76dddacd38048257e95fcd57123cc646d2456e85
parent4d9dc0c269be87b92da188df1fbd8bfee4700eb3 (diff)
Check the message type requested is the type received in DTLS
dtls1_get_message has an |mt| variable which is the type of the message that is being requested. If it is negative then any message type is allowed. However the value of |mt| is not checked in one of the main code paths, so a peer can send a message of a completely different type and it will be processed as if it was the message type that we were expecting. This has very little practical consequences because the current behaviour will still fail when the format of the message isn't as expected. Reviewed-by: Andy Polyakov <appro@openssl.org> (cherry picked from commit 8c2b1d872b25f3ec78e04f5cd2de8f21e853c4a6)
-rw-r--r--ssl/d1_both.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/ssl/d1_both.c b/ssl/d1_both.c
index ae8239a2ef..ffd4784a26 100644
--- a/ssl/d1_both.c
+++ b/ssl/d1_both.c
@@ -489,6 +489,12 @@ long dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
return i;
}
+ if (mt >= 0 && s->s3->tmp.message_type != mt) {
+ al = SSL_AD_UNEXPECTED_MESSAGE;
+ SSLerr(SSL_F_DTLS1_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
+ goto f_err;
+ }
+
p = (unsigned char *)s->init_buf->data;
msg_len = msg_hdr->msg_len;