Commit 2ae78da5c0 for openssl.org

commit 2ae78da5c0ed3fc0c4d7d3f5231a1dba40744db3
Author: Abel Thomas <abeltom.kernel@gmail.com>
Date:   Tue Oct 6 20:06:36 2026 +0200

    crypto/evp/digest.c: Fix EVP_MD digest size bounds check against EVP_MAX_MD_SIZE

    evp_md_cache_constants() only validated the provider-reported
    digest size against INT_MAX before caching it into md->md_size.
    Every other consumer of md_size assumes it never exceeds
    EVP_MAX_MD_SIZE, so a provider reporting a size between
    EVP_MAX_MD_SIZE and INT_MAX could lead to buffer overflows
    in callers using EVP_MAX_MD_SIZE-sized output buffers.

    Check mdsize against EVP_MAX_MD_SIZE instead of INT_MAX.

    Resolves: https://github.com/openssl/openssl/issues/32205
    Reviewed-by: Mounir Idrassi <mounir.idrassi@idrix.fr>
    Reviewed-by: Jakub Zelenka <jakub.zelenka@openssl.foundation>
    Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
    Merge-date: Tue Nov 10 16:21:27 2026
    Merged-from: https://github.com/openssl/openssl/pull/32209

diff --git a/crypto/evp/digest.c b/crypto/evp/digest.c
index db7121f0a4..96d482cb0f 100644
--- a/crypto/evp/digest.c
+++ b/crypto/evp/digest.c
@@ -817,7 +817,7 @@ static int evp_md_cache_constants(EVP_MD *md)
         &algid_absent);
     params[4] = OSSL_PARAM_construct_end();
     ok = evp_do_md_getparams(md, params) > 0;
-    if (mdsize > INT_MAX || blksz > INT_MAX)
+    if ((mdsize > EVP_MAX_MD_SIZE) || (blksz > INT_MAX))
         ok = 0;
     if (ok) {
         md->block_size = (int)blksz;