diff options
author | beck <> | 2015-07-15 21:52:02 +0000 |
---|---|---|
committer | beck <> | 2015-07-15 21:52:02 +0000 |
commit | e1423b93bd3553efa320e96178feb2e4fbf950d1 (patch) | |
tree | 7d066d88d08963f8b22bdaf2c1bb9bfaee2a754c /src/lib/libssl/s3_clnt.c | |
parent | 9cf0596801d610bf14fe31c968259db1d3d99182 (diff) | |
download | openbsd-e1423b93bd3553efa320e96178feb2e4fbf950d1.tar.gz openbsd-e1423b93bd3553efa320e96178feb2e4fbf950d1.tar.bz2 openbsd-e1423b93bd3553efa320e96178feb2e4fbf950d1.zip |
test for n<0 before use in CBS_init - mostly to shut up coverity.
reluctant ok miod@
Diffstat (limited to 'src/lib/libssl/s3_clnt.c')
-rw-r--r-- | src/lib/libssl/s3_clnt.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c index 6bc5a8b622..3f7f3a411d 100644 --- a/src/lib/libssl/s3_clnt.c +++ b/src/lib/libssl/s3_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_clnt.c,v 1.117 2015/07/15 18:35:34 beck Exp $ */ | 1 | /* $OpenBSD: s3_clnt.c,v 1.118 2015/07/15 21:52:02 beck Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -996,7 +996,6 @@ ssl3_get_server_certificate(SSL *s) | |||
996 | goto f_err; | 996 | goto f_err; |
997 | } | 997 | } |
998 | 998 | ||
999 | CBS_init(&cbs, s->init_msg, n); | ||
1000 | 999 | ||
1001 | if ((sk = sk_X509_new_null()) == NULL) { | 1000 | if ((sk = sk_X509_new_null()) == NULL) { |
1002 | SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE, | 1001 | SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE, |
@@ -1004,8 +1003,13 @@ ssl3_get_server_certificate(SSL *s) | |||
1004 | goto err; | 1003 | goto err; |
1005 | } | 1004 | } |
1006 | 1005 | ||
1007 | if (n < 0 || CBS_len(&cbs) < 3) | 1006 | if (n < 0) |
1007 | goto truncated; | ||
1008 | |||
1009 | CBS_init(&cbs, s->init_msg, n); | ||
1010 | if (CBS_len(&cbs) < 3) | ||
1008 | goto truncated; | 1011 | goto truncated; |
1012 | |||
1009 | if (!CBS_get_u24_length_prefixed(&cbs, &cert_list) || | 1013 | if (!CBS_get_u24_length_prefixed(&cbs, &cert_list) || |
1010 | CBS_len(&cbs) != 0) { | 1014 | CBS_len(&cbs) != 0) { |
1011 | al = SSL_AD_DECODE_ERROR; | 1015 | al = SSL_AD_DECODE_ERROR; |
@@ -1797,9 +1801,16 @@ ssl3_get_cert_status(SSL *s) | |||
1797 | if (!ok) | 1801 | if (!ok) |
1798 | return ((int)n); | 1802 | return ((int)n); |
1799 | 1803 | ||
1800 | CBS_init(&cert_status, s->init_msg, n); | 1804 | if (n < 0) { |
1805 | /* need at least status type + length */ | ||
1806 | al = SSL_AD_DECODE_ERROR; | ||
1807 | SSLerr(SSL_F_SSL3_GET_CERT_STATUS, | ||
1808 | SSL_R_LENGTH_MISMATCH); | ||
1809 | goto f_err; | ||
1810 | } | ||
1801 | 1811 | ||
1802 | if (n < 0 || !CBS_get_u8(&cert_status, &status_type) || | 1812 | CBS_init(&cert_status, s->init_msg, n); |
1813 | if (!CBS_get_u8(&cert_status, &status_type) || | ||
1803 | CBS_len(&cert_status) < 3) { | 1814 | CBS_len(&cert_status) < 3) { |
1804 | /* need at least status type + length */ | 1815 | /* need at least status type + length */ |
1805 | al = SSL_AD_DECODE_ERROR; | 1816 | al = SSL_AD_DECODE_ERROR; |