| From f18bcb572c494fc7cbaeeed58f59fba0238afc71 Mon Sep 17 00:00:00 2001 |
| From: Andrei Botila <andrei.botila@nxp.com> |
| Date: Fri, 28 Feb 2020 12:46:48 +0200 |
| Subject: [PATCH] crypto: caam - update xts sector size for large input length |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit 3f142b6a7b573bde6cff926f246da05652c61eb4 upstream. |
| |
| Since in the software implementation of XTS-AES there is |
| no notion of sector every input length is processed the same way. |
| CAAM implementation has the notion of sector which causes different |
| results between the software implementation and the one in CAAM |
| for input lengths bigger than 512 bytes. |
| Increase sector size to maximum value on 16 bits. |
| |
| Fixes: c6415a6016bf ("crypto: caam - add support for acipher xts(aes)") |
| Cc: <stable@vger.kernel.org> # v4.12+ |
| Signed-off-by: Andrei Botila <andrei.botila@nxp.com> |
| Reviewed-by: Horia Geantă <horia.geanta@nxp.com> |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/crypto/caam/caamalg_desc.c b/drivers/crypto/caam/caamalg_desc.c |
| index bb47ae5dca38..2cae1824bc06 100644 |
| --- a/drivers/crypto/caam/caamalg_desc.c |
| +++ b/drivers/crypto/caam/caamalg_desc.c |
| @@ -1512,7 +1512,13 @@ EXPORT_SYMBOL(cnstr_shdsc_skcipher_decap); |
| */ |
| void cnstr_shdsc_xts_skcipher_encap(u32 * const desc, struct alginfo *cdata) |
| { |
| - __be64 sector_size = cpu_to_be64(512); |
| + /* |
| + * Set sector size to a big value, practically disabling |
| + * sector size segmentation in xts implementation. We cannot |
| + * take full advantage of this HW feature with existing |
| + * crypto API / dm-crypt SW architecture. |
| + */ |
| + __be64 sector_size = cpu_to_be64(BIT(15)); |
| u32 *key_jump_cmd; |
| |
| init_sh_desc(desc, HDR_SHARE_SERIAL | HDR_SAVECTX); |
| @@ -1563,7 +1569,13 @@ EXPORT_SYMBOL(cnstr_shdsc_xts_skcipher_encap); |
| */ |
| void cnstr_shdsc_xts_skcipher_decap(u32 * const desc, struct alginfo *cdata) |
| { |
| - __be64 sector_size = cpu_to_be64(512); |
| + /* |
| + * Set sector size to a big value, practically disabling |
| + * sector size segmentation in xts implementation. We cannot |
| + * take full advantage of this HW feature with existing |
| + * crypto API / dm-crypt SW architecture. |
| + */ |
| + __be64 sector_size = cpu_to_be64(BIT(15)); |
| u32 *key_jump_cmd; |
| |
| init_sh_desc(desc, HDR_SHARE_SERIAL | HDR_SAVECTX); |
| -- |
| 2.7.4 |
| |