Patch "crypto: talitos - fix ahash algorithms registration" has been added to the 4.5-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
crypto: talitos - fix ahash algorithms registration
to the 4.5-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-talitos-fix-ahash-algorithms-registration.patch
and it can be found in the queue-4.5 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
3639ca840df953f9af6f15fc8a6bf77f19075ab1Mon Sep 17 00:00:00 2001
From: Horia Geant? <[email protected]>
Date: Thu, 21 Apr 2016 19:24:55 +0300
Subject: crypto: talitos - fix ahash algorithms registration
From: Horia Geant? <[email protected]>
commit 3639ca840df953f9af6f15fc8a6bf77f19075ab1 upstream.
Provide hardware state import/export functionality, as mandated by commit 8996eafdcbad ("crypto: ahash - ensure statesize is non-zero")
--- drivers/crypto/talitos.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+)
drivers/crypto/talitos.c +64 -0
@@ -835,6 +835,16 @@ struct talitos_ahash_req_ctx {struct scatterlist *psrc; }; +struct talitos_export_state { +u32 hw_context[TALITOS_MDEU_MAX_CONTEXT_SIZE /sizeof (u32)]; +u8 buf[HASH_MAX_BLOCK_SIZE ]; +unsigned int swinit; +unsigned int first; +unsigned int last; +unsigned int to_hash_later; +unsigned int nbuf; +}; +static int aead_setkey (struct crypto_aead *authenc,const u8 *key,unsigned int keylen) {
@@ -1981,6 +1991,46 @@ static int ahash_digest(struct ahash_reqreturn ahash_process_req (areq, areq->nbytes); } +static int ahash_export (struct ahash_request *areq,void *out) +{ +struct talitos_ahash_req_ctx *req_ctx =ahash_request_ctx (areq); +struct talitos_export_state *export = out; + +memcpy (export->hw_context, req_ctx->hw_context, + req_ctx->hw_context_size); +memcpy (export->buf, req_ctx->buf, req_ctx->nbuf); + export->swinit = req_ctx->swinit; + export->first = req_ctx->first; + export->last = req_ctx->last; + export->to_hash_later = req_ctx->to_hash_later; + export->nbuf = req_ctx->nbuf; + +return 0 ; +} + +static int ahash_import (struct ahash_request *areq,const void *in) +{ +struct talitos_ahash_req_ctx *req_ctx =ahash_request_ctx (areq); +struct crypto_ahash *tfm =crypto_ahash_reqtfm (areq); +const struct talitos_export_state *export = in; + +memset (req_ctx,0 ,sizeof (*req_ctx)); + req_ctx->hw_context_size = + (crypto_ahash_digestsize (tfm) <=SHA256_DIGEST_SIZE ) + ?TALITOS_MDEU_CONTEXT_SIZE_MD5_SHA1_SHA256 + :TALITOS_MDEU_CONTEXT_SIZE_SHA384_SHA512 ; +memcpy (req_ctx->hw_context, export->hw_context, + req_ctx->hw_context_size); +memcpy (req_ctx->buf, export->buf, export->nbuf); + req_ctx->swinit = export->swinit; + req_ctx->first = export->first; + req_ctx->last = export->last; + req_ctx->to_hash_later = export->to_hash_later; + req_ctx->nbuf = export->nbuf; + +return 0 ; +} +struct keyhash_result {struct completion completion;int err;
@@ -2458,6 +2508,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = MD5_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "md5", .cra_driver_name = "md5-talitos",
@@ -2473,6 +2524,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA1_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "sha1", .cra_driver_name = "sha1-talitos",
@@ -2488,6 +2540,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA224_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "sha224", .cra_driver_name = "sha224-talitos",
@@ -2503,6 +2556,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA256_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "sha256", .cra_driver_name = "sha256-talitos",
@@ -2518,6 +2572,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA384_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "sha384", .cra_driver_name = "sha384-talitos",
@@ -2533,6 +2588,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA512_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "sha512", .cra_driver_name = "sha512-talitos",
@@ -2548,6 +2604,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = MD5_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "hmac(md5)", .cra_driver_name = "hmac-md5-talitos",
@@ -2563,6 +2620,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA1_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "hmac(sha1)", .cra_driver_name = "hmac-sha1-talitos",
@@ -2578,6 +2636,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA224_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "hmac(sha224)", .cra_driver_name = "hmac-sha224-talitos",
@@ -2593,6 +2652,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA256_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "hmac(sha256)", .cra_driver_name = "hmac-sha256-talitos",
@@ -2608,6 +2668,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA384_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "hmac(sha384)", .cra_driver_name = "hmac-sha384-talitos",
@@ -2623,6 +2684,7 @@ static struct talitos_alg_template drive { .type = CRYPTO_ALG_TYPE_AHASH, .alg.hash = { .halg.digestsize = SHA512_DIGEST_SIZE, + .halg.statesize = sizeof(struct talitos_export_state), .halg.base = { .cra_name = "hmac(sha512)", .cra_driver_name = "hmac-sha512-talitos",
@@ -2814,6 +2876,8 @@ static struct talitos_crypto_alg *talito t_alg->algt.alg.hash.finup = ahash_finup; t_alg->algt.alg.hash.digest = ahash_digest; t_alg->algt.alg.hash.setkey = ahash_setkey; + t_alg->algt.alg.hash.import = ahash_import; + t_alg->algt.alg.hash.export = ahash_export;if (!(priv->features &TALITOS_FTR_HMAC_OK ) && !strncmp (alg->cra_name,"hmac" ,4 )) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.5/crypto-talitos-fix-ahash-algorithms-registration.patch