crypto: ccp - memset structure fields to zero before reuse
The AES GCM function reuses an 'op' data structure, which members
contain values that must be cleared for each (re)use.
This fix resolves a crypto self-test failure:
alg: aead: gcm-aes-ccp encryption test failed (wrong result) on test vector 2, cfg="two even aligned splits"
Fixes: 36cf515b9b
("crypto: ccp - Enable support for AES GCM on v5 CCPs")
Cc: <stable@vger.kernel.org>
Signed-off-by: Gary R Hook <gary.hook@amd.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
95566aa75c
commit
20e833dc36
|
@ -622,6 +622,7 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q,
|
|||
|
||||
unsigned long long *final;
|
||||
unsigned int dm_offset;
|
||||
unsigned int jobid;
|
||||
unsigned int ilen;
|
||||
bool in_place = true; /* Default value */
|
||||
int ret;
|
||||
|
@ -660,9 +661,11 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q,
|
|||
p_tag = scatterwalk_ffwd(sg_tag, p_inp, ilen);
|
||||
}
|
||||
|
||||
jobid = CCP_NEW_JOBID(cmd_q->ccp);
|
||||
|
||||
memset(&op, 0, sizeof(op));
|
||||
op.cmd_q = cmd_q;
|
||||
op.jobid = CCP_NEW_JOBID(cmd_q->ccp);
|
||||
op.jobid = jobid;
|
||||
op.sb_key = cmd_q->sb_key; /* Pre-allocated */
|
||||
op.sb_ctx = cmd_q->sb_ctx; /* Pre-allocated */
|
||||
op.init = 1;
|
||||
|
@ -813,6 +816,13 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q,
|
|||
final[0] = cpu_to_be64(aes->aad_len * 8);
|
||||
final[1] = cpu_to_be64(ilen * 8);
|
||||
|
||||
memset(&op, 0, sizeof(op));
|
||||
op.cmd_q = cmd_q;
|
||||
op.jobid = jobid;
|
||||
op.sb_key = cmd_q->sb_key; /* Pre-allocated */
|
||||
op.sb_ctx = cmd_q->sb_ctx; /* Pre-allocated */
|
||||
op.init = 1;
|
||||
op.u.aes.type = aes->type;
|
||||
op.u.aes.mode = CCP_AES_MODE_GHASH;
|
||||
op.u.aes.action = CCP_AES_GHASHFINAL;
|
||||
op.src.type = CCP_MEMTYPE_SYSTEM;
|
||||
|
|
Loading…
Reference in New Issue