This is a note to let you know that I've just added the patch titled crypto: caam/qi - add support for more XTS key lengths to the 5.9-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-caam-qi-add-support-for-more-xts-key-lengths.patch and it can be found in the queue-5.9 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 62b9a6690926ee199445b23fd46e6349d9057146 Mon Sep 17 00:00:00 2001 From: Andrei Botila <andrei.botila@xxxxxxx> Date: Tue, 22 Sep 2020 19:03:23 +0300 Subject: crypto: caam/qi - add support for more XTS key lengths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Andrei Botila <andrei.botila@xxxxxxx> commit 62b9a6690926ee199445b23fd46e6349d9057146 upstream. 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. Fixes: b189817cf789 ("crypto: caam/qi - add ablkcipher and authenc algorithms") Cc: <stable@xxxxxxxxxxxxxxx> # v4.12+ Signed-off-by: Andrei Botila <andrei.botila@xxxxxxx> Reviewed-by: Horia Geantă <horia.geanta@xxxxxxx> Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/crypto/caam/caamalg_qi.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) --- a/drivers/crypto/caam/caamalg_qi.c +++ b/drivers/crypto/caam/caamalg_qi.c @@ -18,6 +18,7 @@ #include "qi.h" #include "jr.h" #include "caamalg_desc.h" +#include <crypto/xts.h> #include <asm/unaligned.h> /* @@ -68,6 +69,7 @@ struct caam_ctx { struct device *qidev; spinlock_t lock; /* Protects multiple init of driver context */ struct caam_drv_ctx *drv_ctx[NUM_OP]; + bool xts_key_fallback; struct crypto_skcipher *fallback; }; @@ -734,11 +736,15 @@ static int xts_skcipher_setkey(struct cr int ret = 0; 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(jrdev, "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; @@ -1407,7 +1413,8 @@ static inline int skcipher_crypt(struct if (!req->cryptlen && !ctx->fallback) return 0; - if (ctx->fallback && xts_skcipher_ivsize(req)) { + if (ctx->fallback && (xts_skcipher_ivsize(req) || + ctx->xts_key_fallback)) { struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req); skcipher_request_set_tfm(&rctx->fallback_req, ctx->fallback); Patches currently in stable-queue which might be from andrei.botila@xxxxxxx are queue-5.9/crypto-caam-qi-add-support-for-more-xts-key-lengths.patch queue-5.9/crypto-caam-jr-add-support-for-more-xts-key-lengths.patch queue-5.9/crypto-caam-jr-add-fallback-for-xts-with-more-than-8b-iv.patch queue-5.9/crypto-caam-qi2-add-support-for-more-xts-key-lengths.patch queue-5.9/crypto-caam-add-xts-check-for-block-length-equal-to-zero.patch queue-5.9/crypto-caam-qi2-add-fallback-for-xts-with-more-than-8b-iv.patch queue-5.9/crypto-caam-qi-add-fallback-for-xts-with-more-than-8b-iv.patch