crypto: marvell - Don't overwrite default creq->state during initialization
authorRomain Perier <romain.perier@free-electrons.com>
Tue, 9 Aug 2016 09:03:19 +0000 (11:03 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 9 Aug 2016 10:47:31 +0000 (18:47 +0800)
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>
drivers/crypto/marvell/hash.c

index cf8063d8c4887695f50781d22fb570890b71db55..44a8abeba2954265f5fced91eb928fe62fee489a 100644 (file)
@@ -800,13 +800,14 @@ static int mv_cesa_md5_init(struct ahash_request *req)
        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;
 }
 
@@ -868,14 +869,15 @@ static int mv_cesa_sha1_init(struct ahash_request *req)
        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;
 }
 
@@ -937,6 +939,9 @@ static int mv_cesa_sha256_init(struct ahash_request *req)
        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;
@@ -946,8 +951,6 @@ static int mv_cesa_sha256_init(struct ahash_request *req)
        creq->state[6] = SHA256_H6;
        creq->state[7] = SHA256_H7;
 
-       mv_cesa_ahash_init(req, &tmpl, false);
-
        return 0;
 }