Fix SSKDF to not claim a buffer size that is too small for the MAC
authorMatt Caswell <matt@openssl.org>
Thu, 7 Oct 2021 13:14:52 +0000 (14:14 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 22 Oct 2021 07:44:59 +0000 (08:44 +0100)
We also check that our buffer is sufficiently sized for the MAC output

Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16789)

(cherry picked from commit 7be8ba546267787c1b0df8a4fddaf9cb29944cbb)

providers/implementations/kdfs/sskdf.c

index 56ac1e6334027393d030049392ff36de638bcedc..297ddcdc2de1cd85701cbe433bd85d6c9c05b311 100644 (file)
@@ -239,7 +239,7 @@ static int SSKDF_mac_kdm(EVP_MAC_CTX *ctx_init,
         goto end;
 
     out_len = EVP_MAC_CTX_get_mac_size(ctx_init); /* output size */
-    if (out_len <= 0)
+    if (out_len <= 0 || (mac == mac_buf && out_len > sizeof(mac_buf)))
         goto end;
     len = derived_key_len;
 
@@ -263,7 +263,7 @@ static int SSKDF_mac_kdm(EVP_MAC_CTX *ctx_init,
             if (len == 0)
                 break;
         } else {
-            if (!EVP_MAC_final(ctx, mac, NULL, len))
+            if (!EVP_MAC_final(ctx, mac, NULL, out_len))
                 goto end;
             memcpy(out, mac, len);
             break;