diff mbox

[6/8] crypto: caam - Convert GCM to new AEAD interface

Message ID 20150615140525.GA6028@gondor.apana.org.au (mailing list archive)
State Not Applicable
Delegated to: Herbert Xu
Headers show

Commit Message

Herbert Xu June 15, 2015, 2:05 p.m. UTC
On Mon, Jun 15, 2015 at 03:33:20PM +0300, Horia Geant? wrote:
> 
> caam_jr ffe301000.jr: 40000e10: DECO: desc idx 14: Invalid Sequence
> Command. A SEQ IN PTR OR SEQ OUT PTR Command is invalid or a SEQ KEY,
> SEQ LOAD, SEQ FIFO LOAD, or SEQ FIFO STORE decremented the input or
> output sequence length below 0. This error may result if a built-in
> PROTOCOL Command has encountered a malformed PDU.
> alg: aead: encryption failed on test 1 for rfc4543-gcm-aes-caam:
> ret=-1073745424

OK I see what's going on.  I trashed MATH3 which then gets used
as the length by the seq load.  This incremental patch should fix
rfc4543.

Thanks,
diff mbox

Patch

diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index 066a488..c7cccd0 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -1138,7 +1138,7 @@  static int rfc4543_set_sh_desc(struct crypto_aead *aead)
 			 OP_ALG_AS_INITFINAL | OP_ALG_ENCRYPT);
 
 	/* assoclen + cryptlen = seqinlen */
-	append_math_add(desc, REG3, SEQINLEN, REG0, CAAM_CMD_SZ);
+	append_math_sub(desc, REG3, SEQINLEN, REG0, CAAM_CMD_SZ);
 
 	/*
 	 * MOVE_LEN opcode is not available in all SEC HW revisions,
@@ -1151,10 +1151,10 @@  static int rfc4543_set_sh_desc(struct crypto_aead *aead)
 				     (0x8 << MOVE_LEN_SHIFT));
 
 	/* Will read assoclen + cryptlen bytes */
-	append_math_add(desc, VARSEQINLEN, ZERO, REG3, CAAM_CMD_SZ);
+	append_math_sub(desc, VARSEQINLEN, SEQINLEN, REG0, CAAM_CMD_SZ);
 
 	/* Will write assoclen + cryptlen bytes */
-	append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ);
+	append_math_sub(desc, VARSEQOUTLEN, SEQINLEN, REG0, CAAM_CMD_SZ);
 
 	/* Read and write assoclen + cryptlen bytes */
 	append_seq_fifo_store(desc, 0, FIFOST_TYPE_MESSAGE_DATA | KEY_VLF);
@@ -1213,7 +1213,7 @@  static int rfc4543_set_sh_desc(struct crypto_aead *aead)
 			 OP_ALG_AS_INITFINAL | OP_ALG_DECRYPT | OP_ALG_ICV_ON);
 
 	/* assoclen + cryptlen = seqoutlen */
-	append_math_add(desc, REG3, SEQOUTLEN, REG0, CAAM_CMD_SZ);
+	append_math_sub(desc, REG3, SEQOUTLEN, REG0, CAAM_CMD_SZ);
 
 	/*
 	 * MOVE_LEN opcode is not available in all SEC HW revisions,
@@ -1226,10 +1226,10 @@  static int rfc4543_set_sh_desc(struct crypto_aead *aead)
 				     (0x8 << MOVE_LEN_SHIFT));
 
 	/* Will read assoclen + cryptlen bytes */
-	append_math_add(desc, VARSEQINLEN, ZERO, REG3, CAAM_CMD_SZ);
+	append_math_sub(desc, VARSEQINLEN, SEQOUTLEN, REG0, CAAM_CMD_SZ);
 
 	/* Will write assoclen + cryptlen bytes */
-	append_math_add(desc, VARSEQOUTLEN, ZERO, REG3, CAAM_CMD_SZ);
+	append_math_sub(desc, VARSEQOUTLEN, SEQOUTLEN, REG0, CAAM_CMD_SZ);
 
 	/* Store payload data */
 	append_seq_fifo_store(desc, 0, FIFOST_TYPE_MESSAGE_DATA | FIFOLDST_VLF);