| From 57cfda1ac74e58767f6305bd1ea3449177425460 Mon Sep 17 00:00:00 2001 |
| From: Romain Perier <romain.perier@free-electrons.com> |
| Date: Tue, 9 Aug 2016 11:03:19 +0200 |
| Subject: crypto: marvell - Don't overwrite default creq->state during initialization |
| |
| From: Romain Perier <romain.perier@free-electrons.com> |
| |
| commit 57cfda1ac74e58767f6305bd1ea3449177425460 upstream. |
| |
| Currently, in mv_cesa_{md5,sha1,sha256}_init creq->state is initialized |
| before the call to mv_cesa_ahash_init. This is wrong because this |
| function fills creq with zero by using memset, so its 'state' that |
| contains the default DIGEST is overwritten. This commit fixes the issue |
| by initializing creq->state just after the call to mv_cesa_ahash_init. |
| |
| Fixes: commit b0ef51067cb4 ("crypto: marvell/cesa - initialize hash...") |
| Signed-off-by: Romain Perier <romain.perier@free-electrons.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/crypto/marvell/hash.c | 15 +++++++++------ |
| 1 file changed, 9 insertions(+), 6 deletions(-) |
| |
| --- a/drivers/crypto/marvell/hash.c |
| +++ b/drivers/crypto/marvell/hash.c |
| @@ -805,13 +805,14 @@ static int mv_cesa_md5_init(struct ahash |
| struct mv_cesa_op_ctx tmpl = { }; |
| |
| mv_cesa_set_op_cfg(&tmpl, CESA_SA_DESC_CFG_MACM_MD5); |
| + |
| + mv_cesa_ahash_init(req, &tmpl, true); |
| + |
| creq->state[0] = MD5_H0; |
| creq->state[1] = MD5_H1; |
| creq->state[2] = MD5_H2; |
| creq->state[3] = MD5_H3; |
| |
| - mv_cesa_ahash_init(req, &tmpl, true); |
| - |
| return 0; |
| } |
| |
| @@ -873,14 +874,15 @@ static int mv_cesa_sha1_init(struct ahas |
| struct mv_cesa_op_ctx tmpl = { }; |
| |
| mv_cesa_set_op_cfg(&tmpl, CESA_SA_DESC_CFG_MACM_SHA1); |
| + |
| + mv_cesa_ahash_init(req, &tmpl, false); |
| + |
| creq->state[0] = SHA1_H0; |
| creq->state[1] = SHA1_H1; |
| creq->state[2] = SHA1_H2; |
| creq->state[3] = SHA1_H3; |
| creq->state[4] = SHA1_H4; |
| |
| - mv_cesa_ahash_init(req, &tmpl, false); |
| - |
| return 0; |
| } |
| |
| @@ -942,6 +944,9 @@ static int mv_cesa_sha256_init(struct ah |
| struct mv_cesa_op_ctx tmpl = { }; |
| |
| mv_cesa_set_op_cfg(&tmpl, CESA_SA_DESC_CFG_MACM_SHA256); |
| + |
| + mv_cesa_ahash_init(req, &tmpl, false); |
| + |
| creq->state[0] = SHA256_H0; |
| creq->state[1] = SHA256_H1; |
| creq->state[2] = SHA256_H2; |
| @@ -951,8 +956,6 @@ static int mv_cesa_sha256_init(struct ah |
| creq->state[6] = SHA256_H6; |
| creq->state[7] = SHA256_H7; |
| |
| - mv_cesa_ahash_init(req, &tmpl, false); |
| - |
| return 0; |
| } |
| |