Patch "crypto: caam - fix echainiv(authenc) encrypt shared descriptor" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
crypto: caam - fix echainiv(authenc) encrypt shared descriptor
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
crypto-caam-fix-echainiv-authenc-encrypt-shared-descriptor.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
1d2d87e81ea21f64c19b95ef228b865a6880e17eMon Sep 17 00:00:00 2001
From: =?UTF-8?q?Horia=20Geant=C4=83?= <[email protected]>
Date: Thu, 4 Aug 2016 20:02:46 +0300
Subject: crypto: caam - fix echainiv(authenc) encrypt shared descriptor
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Horia Geantă <[email protected]>
commit 1d2d87e81ea21f64c19b95ef228b865a6880e17e upstream.
There are a few things missed by the conversion to the new AEAD interface:
1 - echainiv(authenc) encrypt shared descriptor
The shared descriptor is incorrect: due to the order of operations, at some point in time MATH3 register is being overwritten.
2 - buffer used for echainiv(authenc) encrypt shared descriptor
Encrypt and givencrypt shared descriptors (for AEAD ops) are mutually exclusive and thus use the same buffer in context state: sh_desc_enc.
However, there's one place missed by s/sh_desc_givenc/sh_desc_enc, leading to errors when echainiv(authenc(...)) algorithms are used:
DECO: desc idx 14: Header Error. Invalid length or parity, or certain other problems.
While here, also fix a typo: dma_mapping_error() is checking for validity of sh_desc_givenc_dma instead of sh_desc_enc_dma.
--- drivers/crypto/caam/caamalg.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/crypto/caam/caamalg.c +5 -5
@@ -614,7 +614,7 @@ skip_enc: keys_fit_inline = true;/* aead_givencrypt shared descriptor */ - desc = ctx->sh_desc_givenc; + desc = ctx->sh_desc_enc;/* Note: Context registers are saved. */ init_sh_desc_key_aead (desc, ctx, keys_fit_inline, is_rfc3686);
@@ -645,13 +645,13 @@ copy_iv:append_operation (desc, ctx->class2_alg_type |OP_ALG_AS_INITFINAL |OP_ALG_ENCRYPT ); -/* ivsize + cryptlen = seqoutlen - authsize */ -append_math_sub_imm_u32 (desc,REG3 ,SEQOUTLEN ,IMM , ctx->authsize); -/* Read and write assoclen bytes */ append_math_add (desc,VARSEQINLEN ,ZERO ,REG3 ,CAAM_CMD_SZ );append_math_add (desc,VARSEQOUTLEN ,ZERO ,REG3 ,CAAM_CMD_SZ ); +/* ivsize + cryptlen = seqoutlen - authsize */ +append_math_sub_imm_u32 (desc,REG3 ,SEQOUTLEN ,IMM , ctx->authsize); +/* Skip assoc data */ append_seq_fifo_store (desc,0 ,FIFOST_TYPE_SKIP |FIFOLDST_VLF );
@@ -697,7 +697,7 @@ copy_iv: ctx->sh_desc_enc_dma =dma_map_single (jrdev, desc,desc_bytes (desc),DMA_TO_DEVICE ); -if (dma_mapping_error (jrdev, ctx->sh_desc_givenc_dma)) { +if (dma_mapping_error (jrdev, ctx->sh_desc_enc_dma)) {dev_err (jrdev,"unable to map shared descriptor\n" );return -ENOMEM ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/crypto-caam-fix-echainiv-authenc-encrypt-shared-descriptor.patch queue-4.4/crypto-caam-defer-aead_set_sh_desc-in-case-of-zero-authsize.patch