Skip to content

Commit

Permalink
Bug 1610687 - Crash on unaligned CMACContext.aes.keySchedule when usi…
Browse files Browse the repository at this point in the history
…ng AES-NI intrinsics r=kjacobs

https://phabricator.services.mozilla.com/D60699
  • Loading branch information
rjrelyea committed Feb 10, 2020
1 parent c878eaf commit dc6f6df
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions lib/freebl/cmac.c
Expand Up @@ -22,7 +22,7 @@ struct CMACContextStr {
* add a new Context pointer to the cipher union with the correct type. */
CMACCipher cipherType;
union {
AESContext aes;
AESContext *aes;
} cipher;
int blockSize;

Expand Down Expand Up @@ -62,7 +62,7 @@ cmac_Encrypt(CMACContext *ctx, unsigned char *output,
{
if (ctx->cipherType == CMAC_AES) {
unsigned int tmpOutputLen;
SECStatus rv = AES_Encrypt(&ctx->cipher.aes, output, &tmpOutputLen,
SECStatus rv = AES_Encrypt(ctx->cipher.aes, output, &tmpOutputLen,
ctx->blockSize, input, inputLen);

/* Assumption: AES_Encrypt (when in ECB mode) always returns an
Expand Down Expand Up @@ -156,8 +156,9 @@ CMAC_Init(CMACContext *ctx, CMACCipher type,

ctx->blockSize = AES_BLOCK_SIZE;
ctx->cipherType = CMAC_AES;
if (AES_InitContext(&ctx->cipher.aes, key, key_len, NULL, NSS_AES, 1,
ctx->blockSize) != SECSuccess) {
ctx->cipher.aes = AES_CreateContext(key, NULL, NSS_AES, 1, key_len,
ctx->blockSize);
if (ctx->cipher.aes == NULL) {
return SECFailure;
}

Expand Down Expand Up @@ -308,8 +309,8 @@ CMAC_Destroy(CMACContext *ctx, PRBool free_it)
return;
}

if (ctx->cipherType == CMAC_AES) {
AES_DestroyContext(&ctx->cipher.aes, PR_FALSE);
if (ctx->cipherType == CMAC_AES && ctx->cipher.aes != NULL) {
AES_DestroyContext(ctx->cipher.aes, PR_TRUE);
}

/* Destroy everything in the context. This includes sensitive data in
Expand Down

0 comments on commit dc6f6df

Please sign in to comment.