Don't access memory before checking the correct length in aesni_cbc_hmac_sha256_ctrl...
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Fri, 24 Mar 2017 08:03:54 +0000 (09:03 +0100)
committerAndy Polyakov <appro@openssl.org>
Sat, 25 Mar 2017 10:14:03 +0000 (11:14 +0100)
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3023)

(cherry picked from commit 1b6f5a4d3b8cdb02e0bba6878a2b70c850522440)

crypto/evp/e_aes_cbc_hmac_sha256.c

index 5a92e0b85dda81ab1e1d98fe4d9197f6018b42f3..93b88a0bbc25b0bb571382590ae3f9a0014b7035 100644 (file)
@@ -777,11 +777,13 @@ static int aesni_cbc_hmac_sha256_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
     case EVP_CTRL_AEAD_TLS1_AAD:
         {
             unsigned char *p = ptr;
-            unsigned int len = p[arg - 2] << 8 | p[arg - 1];
+            unsigned int len;
 
             if (arg != EVP_AEAD_TLS1_AAD_LEN)
                 return -1;
 
+            len = p[arg - 2] << 8 | p[arg - 1];
+
             if (EVP_CIPHER_CTX_encrypting(ctx)) {
                 key->payload_length = len;
                 if ((key->aux.tls_ver =