mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 01:59:02 +00:00
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
|
From 8ceda883205db6dfedb82e39f67feae3b50c95a1 Mon Sep 17 00:00:00 2001
|
||
|
From: Eneas U de Queiroz <cotequeiroz@gmail.com>
|
||
|
Date: Fri, 20 Dec 2019 16:02:17 -0300
|
||
|
Subject: [PATCH 06/11] crypto: qce - initialize fallback only for AES
|
||
|
|
||
|
Adjust cra_flags to add CRYPTO_NEED_FALLBACK only for AES ciphers, where
|
||
|
AES-192 is not handled by the qce hardware, and don't allocate & free
|
||
|
the fallback skcipher for other algorithms.
|
||
|
|
||
|
Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
|
||
|
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||
|
---
|
||
|
drivers/crypto/qce/skcipher.c | 17 ++++++++++++++---
|
||
|
1 file changed, 14 insertions(+), 3 deletions(-)
|
||
|
|
||
|
--- a/drivers/crypto/qce/skcipher.c
|
||
|
+++ b/drivers/crypto/qce/skcipher.c
|
||
|
@@ -257,7 +257,14 @@ static int qce_skcipher_init(struct cryp
|
||
|
|
||
|
memset(ctx, 0, sizeof(*ctx));
|
||
|
crypto_skcipher_set_reqsize(tfm, sizeof(struct qce_cipher_reqctx));
|
||
|
+ return 0;
|
||
|
+}
|
||
|
+
|
||
|
+static int qce_skcipher_init_fallback(struct crypto_skcipher *tfm)
|
||
|
+{
|
||
|
+ struct qce_cipher_ctx *ctx = crypto_skcipher_ctx(tfm);
|
||
|
|
||
|
+ qce_skcipher_init(tfm);
|
||
|
ctx->fallback = crypto_alloc_sync_skcipher(crypto_tfm_alg_name(&tfm->base),
|
||
|
0, CRYPTO_ALG_NEED_FALLBACK);
|
||
|
return PTR_ERR_OR_ZERO(ctx->fallback);
|
||
|
@@ -387,14 +394,18 @@ static int qce_skcipher_register_one(con
|
||
|
|
||
|
alg->base.cra_priority = 300;
|
||
|
alg->base.cra_flags = CRYPTO_ALG_ASYNC |
|
||
|
- CRYPTO_ALG_NEED_FALLBACK |
|
||
|
CRYPTO_ALG_KERN_DRIVER_ONLY;
|
||
|
alg->base.cra_ctxsize = sizeof(struct qce_cipher_ctx);
|
||
|
alg->base.cra_alignmask = 0;
|
||
|
alg->base.cra_module = THIS_MODULE;
|
||
|
|
||
|
- alg->init = qce_skcipher_init;
|
||
|
- alg->exit = qce_skcipher_exit;
|
||
|
+ if (IS_AES(def->flags)) {
|
||
|
+ alg->base.cra_flags |= CRYPTO_ALG_NEED_FALLBACK;
|
||
|
+ alg->init = qce_skcipher_init_fallback;
|
||
|
+ alg->exit = qce_skcipher_exit;
|
||
|
+ } else {
|
||
|
+ alg->init = qce_skcipher_init;
|
||
|
+ }
|
||
|
|
||
|
INIT_LIST_HEAD(&tmpl->entry);
|
||
|
tmpl->crypto_alg_type = CRYPTO_ALG_TYPE_SKCIPHER;
|