]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
lib/accelerated/x86/aes-gcm-x86-pclmul-avx: add short buffer checks
authorAlexander Sosedkin <asosedkin@redhat.com>
Mon, 24 Jan 2022 16:33:48 +0000 (17:33 +0100)
committerAlexander Sosedkin <asosedkin@redhat.com>
Mon, 24 Jan 2022 16:33:54 +0000 (17:33 +0100)
Signed-off-by: Alexander Sosedkin <asosedkin@redhat.com>
lib/accelerated/x86/aes-gcm-x86-pclmul-avx.c

index 3b4140acb2e144b536e31f4d343bc3ac3cc3ed1d..f601c0b2823d17c7c4edf19e8e6cc625a174bc2e 100644 (file)
@@ -223,6 +223,9 @@ aes_gcm_decrypt(void *_ctx, const void *src, size_t src_size,
        if (unlikely(ctx->finished))
                return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
 
+       if (unlikely(dst_size < src_size))
+               return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);
+
        gcm_ghash(ctx, src, src_size);
        ctx->gcm.len.u[1] += src_size;
 
@@ -328,7 +331,7 @@ aesni_gcm_aead_decrypt(void *_ctx,
        uint8_t tag[MAX_HASH_SIZE];
        size_t s = 0;
 
-       if (encr_size < tag_size)
+       if (unlikely(encr_size < tag_size))
                return gnutls_assert_val(GNUTLS_E_DECRYPTION_FAILED);
 
        aes_gcm_setiv(ctx, nonce, nonce_size);
@@ -336,6 +339,9 @@ aesni_gcm_aead_decrypt(void *_ctx,
 
        encr_size -= tag_size;
 
+       if (unlikely(plain_size < encr_size))
+               return gnutls_assert_val(GNUTLS_E_SHORT_MEMORY_BUFFER);
+
        if (encr_size >= 96) {
                s = aesni_gcm_decrypt(encr, plain, encr_size, ALIGN16(&ctx->expanded_key),
                        ctx->gcm.Yi.c, ctx->gcm.Xi.u);