FAILED: patch "[PATCH] crypto: caam/qi2 - add support for more XTS key lengths" failed to apply to 5.8-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.8-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 596efd57cfa1e1bee575e2a2df44fd8ec5e4a42d Mon Sep 17 00:00:00 2001
From: Andrei Botila <[email protected]>
Date: Tue, 22 Sep 2020 19:03:24 +0300
Subject: [PATCH] crypto: caam/qi2 - add support for more XTS key lengths
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
CAAM accelerator only supports XTS-AES-128 and XTS-AES-256 since it adheres strictly to the standard. All the other key lengths are accepted and processed through a fallback as long as they pass the xts_verify_key() checks.
drivers/crypto/caam/caamalg_qi2.c +12 -4
@@ -19,6 +19,7 @@#include <linux/fsl/mc.h> #include <soc/fsl/dpaa2-io.h> #include <soc/fsl/dpaa2-fd.h> +#include <crypto/xts.h> #include <asm/unaligned.h> #define CAAM_CRA_PRIORITY 2000
@@ -81,6 +82,7 @@ struct caam_ctx {struct alginfo adata;struct alginfo cdata;unsigned int authsize; +bool xts_key_fallback;struct crypto_skcipher *fallback; };
@@ -1060,11 +1062,15 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,u32 *desc;int err; -if (keylen !=2 *AES_MIN_KEY_SIZE && keylen !=2 *AES_MAX_KEY_SIZE ) { + err =xts_verify_key (skcipher, key, keylen); +if (err) {dev_dbg (dev,"key size mismatch\n" ); -return -EINVAL ; +return err; } +if (keylen !=2 *AES_KEYSIZE_128 && keylen !=2 *AES_KEYSIZE_256 ) + ctx->xts_key_fallback = true; + err =crypto_skcipher_setkey (ctx->fallback, key, keylen);if (err)return err;
@@ -1469,7 +1475,8 @@ static int skcipher_encrypt(struct skcipher_request *req)if (!req->cryptlen)return 0 ; -if (ctx->fallback &&xts_skcipher_ivsize (req)) { +if (ctx->fallback && (xts_skcipher_ivsize (req) || + ctx->xts_key_fallback)) {skcipher_request_set_tfm (&caam_req->fallback_req, ctx->fallback); skcipher_request_set_callback(&caam_req->fallback_req, req->base.flags,
@@ -1512,7 +1519,8 @@ static int skcipher_decrypt(struct skcipher_request *req)if (!req->cryptlen)return 0 ; -if (ctx->fallback &&xts_skcipher_ivsize (req)) { +if (ctx->fallback && (xts_skcipher_ivsize (req) || + ctx->xts_key_fallback)) {skcipher_request_set_tfm (&caam_req->fallback_req, ctx->fallback); skcipher_request_set_callback(&caam_req->fallback_req, req->base.flags,