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 '')
| -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; |
