Enforce a strict output length check in CRYPTO_ccm128_tag
authorGuido Vranken <guidovranken@gmail.com>
Mon, 22 Apr 2019 12:11:12 +0000 (14:11 +0200)
committerMatt Caswell <matt@openssl.org>
Thu, 25 Apr 2019 10:00:39 +0000 (11:00 +0100)
Return error if the output tag buffer size doesn't match
the tag size exactly. This prevents the caller from
using that portion of the tag buffer that remains
uninitialized after an otherwise succesfull call to
CRYPTO_ccm128_tag.

Bug found by OSS-Fuzz.

Fix suggested by Kurt Roeckx.

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8810)

(cherry picked from commit 514c9da48b860153079748b0d588cd42191f0b6a)

crypto/modes/ccm128.c

index 85ce84f10d80751c99f45eb5b5e25e2c1f7ab508..742c63f0a9e2c65939320af586b6edf8931b57bb 100644 (file)
@@ -425,7 +425,7 @@ size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len)
 
     M *= 2;
     M += 2;
-    if (len < M)
+    if (len != M)
         return 0;
     memcpy(tag, ctx->cmac.c, M);
     return M;