Commit 9848e4c8 authored by Christian Lamparter's avatar Christian Lamparter Committed by Herbert Xu

crypto: crypto4xx - use sync skcipher for fallback

This replaces struct crypto_skcipher and the extra request size
with struct crypto_sync_skcipher and SYNC_SKCIPHER_REQUEST_ON_STACK(),
which uses a fixed stack size.
Signed-off-by: default avatarChristian Lamparter <chunkeey@gmail.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 7e92e171
...@@ -264,10 +264,10 @@ crypto4xx_ctr_crypt(struct skcipher_request *req, bool encrypt) ...@@ -264,10 +264,10 @@ crypto4xx_ctr_crypt(struct skcipher_request *req, bool encrypt)
* overlow. * overlow.
*/ */
if (counter + nblks < counter) { if (counter + nblks < counter) {
struct skcipher_request *subreq = skcipher_request_ctx(req); SYNC_SKCIPHER_REQUEST_ON_STACK(subreq, ctx->sw_cipher.cipher);
int ret; int ret;
skcipher_request_set_tfm(subreq, ctx->sw_cipher.cipher); skcipher_request_set_sync_tfm(subreq, ctx->sw_cipher.cipher);
skcipher_request_set_callback(subreq, req->base.flags, skcipher_request_set_callback(subreq, req->base.flags,
NULL, NULL); NULL, NULL);
skcipher_request_set_crypt(subreq, req->src, req->dst, skcipher_request_set_crypt(subreq, req->src, req->dst,
...@@ -289,14 +289,14 @@ static int crypto4xx_sk_setup_fallback(struct crypto4xx_ctx *ctx, ...@@ -289,14 +289,14 @@ static int crypto4xx_sk_setup_fallback(struct crypto4xx_ctx *ctx,
{ {
int rc; int rc;
crypto_skcipher_clear_flags(ctx->sw_cipher.cipher, crypto_sync_skcipher_clear_flags(ctx->sw_cipher.cipher,
CRYPTO_TFM_REQ_MASK); CRYPTO_TFM_REQ_MASK);
crypto_skcipher_set_flags(ctx->sw_cipher.cipher, crypto_sync_skcipher_set_flags(ctx->sw_cipher.cipher,
crypto_skcipher_get_flags(cipher) & CRYPTO_TFM_REQ_MASK); crypto_skcipher_get_flags(cipher) & CRYPTO_TFM_REQ_MASK);
rc = crypto_skcipher_setkey(ctx->sw_cipher.cipher, key, keylen); rc = crypto_sync_skcipher_setkey(ctx->sw_cipher.cipher, key, keylen);
crypto_skcipher_clear_flags(cipher, CRYPTO_TFM_RES_MASK); crypto_skcipher_clear_flags(cipher, CRYPTO_TFM_RES_MASK);
crypto_skcipher_set_flags(cipher, crypto_skcipher_set_flags(cipher,
crypto_skcipher_get_flags(ctx->sw_cipher.cipher) & crypto_sync_skcipher_get_flags(ctx->sw_cipher.cipher) &
CRYPTO_TFM_RES_MASK); CRYPTO_TFM_RES_MASK);
return rc; return rc;
......
...@@ -965,15 +965,10 @@ static int crypto4xx_sk_init(struct crypto_skcipher *sk) ...@@ -965,15 +965,10 @@ static int crypto4xx_sk_init(struct crypto_skcipher *sk)
if (alg->base.cra_flags & CRYPTO_ALG_NEED_FALLBACK) { if (alg->base.cra_flags & CRYPTO_ALG_NEED_FALLBACK) {
ctx->sw_cipher.cipher = ctx->sw_cipher.cipher =
crypto_alloc_skcipher(alg->base.cra_name, 0, crypto_alloc_sync_skcipher(alg->base.cra_name, 0,
CRYPTO_ALG_NEED_FALLBACK | CRYPTO_ALG_NEED_FALLBACK);
CRYPTO_ALG_ASYNC);
if (IS_ERR(ctx->sw_cipher.cipher)) if (IS_ERR(ctx->sw_cipher.cipher))
return PTR_ERR(ctx->sw_cipher.cipher); return PTR_ERR(ctx->sw_cipher.cipher);
crypto_skcipher_set_reqsize(sk,
sizeof(struct skcipher_request) + 32 +
crypto_skcipher_reqsize(ctx->sw_cipher.cipher));
} }
amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.cipher); amcc_alg = container_of(alg, struct crypto4xx_alg, alg.u.cipher);
...@@ -992,7 +987,7 @@ static void crypto4xx_sk_exit(struct crypto_skcipher *sk) ...@@ -992,7 +987,7 @@ static void crypto4xx_sk_exit(struct crypto_skcipher *sk)
crypto4xx_common_exit(ctx); crypto4xx_common_exit(ctx);
if (ctx->sw_cipher.cipher) if (ctx->sw_cipher.cipher)
crypto_free_skcipher(ctx->sw_cipher.cipher); crypto_free_sync_skcipher(ctx->sw_cipher.cipher);
} }
static int crypto4xx_aead_init(struct crypto_aead *tfm) static int crypto4xx_aead_init(struct crypto_aead *tfm)
......
...@@ -131,7 +131,7 @@ struct crypto4xx_ctx { ...@@ -131,7 +131,7 @@ struct crypto4xx_ctx {
__le32 iv_nonce; __le32 iv_nonce;
u32 sa_len; u32 sa_len;
union { union {
struct crypto_skcipher *cipher; struct crypto_sync_skcipher *cipher;
struct crypto_aead *aead; struct crypto_aead *aead;
} sw_cipher; } sw_cipher;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment