From: Jiasheng Jiang Date: Fri, 22 Mar 2024 16:26:44 +0000 (+0000) Subject: ssl/ssl_lib.c: Add the check before cast from int to unsigned X-Git-Tag: openssl-3.4.0-alpha1~772 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=165797c7d829aa699f5cfdea4969cad0916e8cdf;p=thirdparty%2Fopenssl.git ssl/ssl_lib.c: Add the check before cast from int to unsigned Add the check before cast from int to unsigned to avoid integer overflow since EVP_MD_get_size() may return negative numbers. Fixes: 919ba00942 ("DANE support structures, constructructors and accessors") Signed-off-by: Jiasheng Jiang Reviewed-by: Neil Horman Reviewed-by: Tomas Mraz Reviewed-by: Tom Cosgrove (Merged from https://github.com/openssl/openssl/pull/23940) --- diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 4c17576ebde..af8b637531c 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -265,6 +265,7 @@ static int dane_tlsa_add(SSL_DANE *dane, int ilen = (int)dlen; int i; int num; + int mdsize; if (dane->trecs == NULL) { ERR_raise(ERR_LIB_SSL, SSL_R_DANE_NOT_ENABLED); @@ -294,9 +295,12 @@ static int dane_tlsa_add(SSL_DANE *dane, } } - if (md != NULL && dlen != (size_t)EVP_MD_get_size(md)) { - ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH); - return 0; + if (md != NULL) { + mdsize = EVP_MD_get_size(md); + if (mdsize < 0 || dlen != (size_t)mdsize) { + ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH); + return 0; + } } if (!data) { ERR_raise(ERR_LIB_SSL, SSL_R_DANE_TLSA_NULL_DATA);