linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/22] crypto: add check for xts input length equal to zero
@ 2020-08-07 16:19 Andrei Botila
  2020-08-07 16:19 ` [PATCH 01/22] crypto: arm/aes-ce - " Andrei Botila
                   ` (21 more replies)
  0 siblings, 22 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila

From: Andrei Botila <andrei.botila@nxp.com>

This patch set is a follow-up on the previous RFC discussion which can be found
here: https://lore.kernel.org/r/4145904.A5P2xsN9yQ@tauon.chronox.de

This series converts all XTS implementations to return 0 when the input length
is equal to 0. This change is necessary in order to standardize the way
skcipher algorithms handle this corner case. This check is made for other
algorithms such as CBC, ARC4, CFB, OFB, SALSA20, CTR, ECB and PCBC, XTS being
the outlier here.

Although some drivers do not explicitly check for requests with zero input
length, their implementations might be able to deal with this case.
Since we don't have the HW to test which ones are able and which ones are not
we rely on the maintainers of these drivers to verify and comment if the changes
are necessary in their driver or not.

One important thing to keep in mind is that in some implementations we make
this check only for XTS algorithms although probably all skcipher algorithms
should return 0 in case of zero input length.

This fix has been tested only on ARMv8 CE, the rest of the patches have
been build tested *only*, and should be tested on actual hardware before
being merged.

Andrei Botila (22):
  crypto: arm/aes-ce - add check for xts input length equal to zero
  crypto: arm/aes-neonbs - add check for xts input length equal to zero
  crypto: arm64/aes - add check for xts input length equal to zero
  crypto: arm64/aes-neonbs - add check for xts input length equal to
    zero
  crypto: powerpc/aes-spe - add check for xts input length equal to zero
  crypto: s390/aes - add check for xts input length equal to zero
  crypto: s390/paes - add check for xts input length equal to zero
  crypto: x86/glue_helper - add check for xts input length equal to zero
  crypto: xts - add check for block length equal to zero
  crypto: atmel-aes - add check for xts input length equal to zero
  crypto: artpec6 - add check for xts input length equal to zero
  crypto: bcm - add check for xts input length equal to zero
  crypto: cavium/cpt - add check for xts input length equal to zero
  crypto: cavium/nitrox - add check for xts input length equal to zero
  crypto: ccp - add check for xts input length equal to zero
  crypto: ccree - add check for xts input length equal to zero
  crypto: chelsio - add check for xts input length equal to zero
  crypto: hisilicon/sec - add check for xts input length equal to zero
  crypto: inside-secure - add check for xts input length equal to zero
  crypto: octeontx - add check for xts input length equal to zero
  crypto: qce - add check for xts input length equal to zero
  crypto: vmx - add check for xts input length equal to zero

 arch/arm/crypto/aes-ce-glue.c                    |  6 ++++++
 arch/arm/crypto/aes-neonbs-glue.c                |  3 +++
 arch/arm64/crypto/aes-glue.c                     |  6 ++++++
 arch/arm64/crypto/aes-neonbs-glue.c              |  3 +++
 arch/powerpc/crypto/aes-spe-glue.c               |  6 ++++++
 arch/s390/crypto/aes_s390.c                      |  3 +++
 arch/s390/crypto/paes_s390.c                     |  3 +++
 arch/x86/crypto/glue_helper.c                    |  3 +++
 crypto/xts.c                                     |  6 ++++++
 drivers/crypto/atmel-aes.c                       |  4 ++++
 drivers/crypto/axis/artpec6_crypto.c             |  6 ++++++
 drivers/crypto/bcm/cipher.c                      |  3 +++
 drivers/crypto/cavium/cpt/cptvf_algs.c           |  4 ++++
 drivers/crypto/cavium/nitrox/nitrox_skcipher.c   |  6 ++++++
 drivers/crypto/ccp/ccp-crypto-aes-xts.c          |  3 +++
 drivers/crypto/ccree/cc_cipher.c                 | 11 ++++++-----
 drivers/crypto/chelsio/chcr_algo.c               |  4 ++++
 drivers/crypto/hisilicon/sec/sec_algs.c          |  4 ++++
 drivers/crypto/inside-secure/safexcel_cipher.c   |  6 ++++++
 drivers/crypto/marvell/octeontx/otx_cptvf_algs.c |  5 +++++
 drivers/crypto/qce/skcipher.c                    |  3 +++
 drivers/crypto/vmx/aes_xts.c                     |  3 +++
 22 files changed, 96 insertions(+), 5 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

* [PATCH 01/22] crypto: arm/aes-ce - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 02/22] crypto: arm/aes-neonbs " Andrei Botila
                   ` (20 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Russell King

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/arm/crypto/aes-ce-glue.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/arm/crypto/aes-ce-glue.c b/arch/arm/crypto/aes-ce-glue.c
index b668c97663ec..57a9cf7fe98a 100644
--- a/arch/arm/crypto/aes-ce-glue.c
+++ b/arch/arm/crypto/aes-ce-glue.c
@@ -452,6 +452,9 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct scatterlist *src, *dst;
 	struct skcipher_walk walk;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
@@ -524,6 +527,9 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct scatterlist *src, *dst;
 	struct skcipher_walk walk;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 02/22] crypto: arm/aes-neonbs - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
  2020-08-07 16:19 ` [PATCH 01/22] crypto: arm/aes-ce - " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 03/22] crypto: arm64/aes " Andrei Botila
                   ` (19 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Russell King

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/arm/crypto/aes-neonbs-glue.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/crypto/aes-neonbs-glue.c b/arch/arm/crypto/aes-neonbs-glue.c
index e6fd32919c81..98ca6e6cca90 100644
--- a/arch/arm/crypto/aes-neonbs-glue.c
+++ b/arch/arm/crypto/aes-neonbs-glue.c
@@ -339,6 +339,9 @@ static int __xts_crypt(struct skcipher_request *req, bool encrypt,
 	struct skcipher_walk walk;
 	int err;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 03/22] crypto: arm64/aes - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
  2020-08-07 16:19 ` [PATCH 01/22] crypto: arm/aes-ce - " Andrei Botila
  2020-08-07 16:19 ` [PATCH 02/22] crypto: arm/aes-neonbs " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 04/22] crypto: arm64/aes-neonbs " Andrei Botila
                   ` (18 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Catalin Marinas, Will Deacon

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/arm64/crypto/aes-glue.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/arm64/crypto/aes-glue.c b/arch/arm64/crypto/aes-glue.c
index 395bbf64b2ab..44c9644c74b1 100644
--- a/arch/arm64/crypto/aes-glue.c
+++ b/arch/arm64/crypto/aes-glue.c
@@ -515,6 +515,9 @@ static int __maybe_unused xts_encrypt(struct skcipher_request *req)
 	struct scatterlist *src, *dst;
 	struct skcipher_walk walk;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
@@ -587,6 +590,9 @@ static int __maybe_unused xts_decrypt(struct skcipher_request *req)
 	struct scatterlist *src, *dst;
 	struct skcipher_walk walk;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 04/22] crypto: arm64/aes-neonbs - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (2 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 03/22] crypto: arm64/aes " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 05/22] crypto: powerpc/aes-spe " Andrei Botila
                   ` (17 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Catalin Marinas, Will Deacon

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/arm64/crypto/aes-neonbs-glue.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm64/crypto/aes-neonbs-glue.c b/arch/arm64/crypto/aes-neonbs-glue.c
index fb507d569922..197bf24e7dae 100644
--- a/arch/arm64/crypto/aes-neonbs-glue.c
+++ b/arch/arm64/crypto/aes-neonbs-glue.c
@@ -330,6 +330,9 @@ static int __xts_crypt(struct skcipher_request *req, bool encrypt,
 	int first = 1;
 	u8 *out, *in;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 05/22] crypto: powerpc/aes-spe - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (3 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 04/22] crypto: arm64/aes-neonbs " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 06/22] crypto: s390/aes " Andrei Botila
                   ` (16 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/powerpc/crypto/aes-spe-glue.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/arch/powerpc/crypto/aes-spe-glue.c b/arch/powerpc/crypto/aes-spe-glue.c
index c2b23b69d7b1..f37d8bef322b 100644
--- a/arch/powerpc/crypto/aes-spe-glue.c
+++ b/arch/powerpc/crypto/aes-spe-glue.c
@@ -327,6 +327,9 @@ static int ppc_xts_encrypt(struct skcipher_request *req)
 	u8 b[2][AES_BLOCK_SIZE];
 	int err;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
@@ -366,6 +369,9 @@ static int ppc_xts_decrypt(struct skcipher_request *req)
 	le128 twk;
 	int err;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 06/22] crypto: s390/aes - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (4 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 05/22] crypto: powerpc/aes-spe " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 07/22] crypto: s390/paes " Andrei Botila
                   ` (15 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Heiko Carstens,
	Vasily Gorbik, Christian Borntraeger

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/s390/crypto/aes_s390.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/s390/crypto/aes_s390.c b/arch/s390/crypto/aes_s390.c
index 73044634d342..bc8855f4b7d1 100644
--- a/arch/s390/crypto/aes_s390.c
+++ b/arch/s390/crypto/aes_s390.c
@@ -437,6 +437,9 @@ static int xts_aes_crypt(struct skcipher_request *req, unsigned long modifier)
 		u8 init[16];
 	} xts_param;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 07/22] crypto: s390/paes - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (5 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 06/22] crypto: s390/aes " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 08/22] crypto: x86/glue_helper " Andrei Botila
                   ` (14 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Heiko Carstens,
	Vasily Gorbik, Christian Borntraeger

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/s390/crypto/paes_s390.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/s390/crypto/paes_s390.c b/arch/s390/crypto/paes_s390.c
index f3caeb17c85b..7f0861c6f019 100644
--- a/arch/s390/crypto/paes_s390.c
+++ b/arch/s390/crypto/paes_s390.c
@@ -494,6 +494,9 @@ static int xts_paes_crypt(struct skcipher_request *req, unsigned long modifier)
 		u8 init[16];
 	} xts_param;
 
+	if (!req->cryptlen)
+		return 0;
+
 	ret = skcipher_walk_virt(&walk, req, false);
 	if (ret)
 		return ret;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 08/22] crypto: x86/glue_helper - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (6 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 07/22] crypto: s390/paes " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 09/22] crypto: xts - add check for block " Andrei Botila
                   ` (13 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 arch/x86/crypto/glue_helper.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/x86/crypto/glue_helper.c b/arch/x86/crypto/glue_helper.c
index d3d91a0abf88..cc5042c72910 100644
--- a/arch/x86/crypto/glue_helper.c
+++ b/arch/x86/crypto/glue_helper.c
@@ -275,6 +275,9 @@ int glue_xts_req_128bit(const struct common_glue_ctx *gctx,
 	unsigned int nbytes, tail;
 	int err;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < XTS_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 09/22] crypto: xts - add check for block length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (7 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 08/22] crypto: x86/glue_helper " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:19 ` [PATCH 10/22] crypto: atmel-aes - add check for xts input " Andrei Botila
                   ` (12 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 crypto/xts.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/crypto/xts.c b/crypto/xts.c
index 3c3ed02c7663..7df68f52fddc 100644
--- a/crypto/xts.c
+++ b/crypto/xts.c
@@ -263,6 +263,9 @@ static int xts_encrypt(struct skcipher_request *req)
 	struct skcipher_request *subreq = &rctx->subreq;
 	int err;
 
+	if (!req->cryptlen)
+		return 0;
+
 	err = xts_init_crypt(req, xts_encrypt_done) ?:
 	      xts_xor_tweak_pre(req, true) ?:
 	      crypto_skcipher_encrypt(subreq) ?:
@@ -280,6 +283,9 @@ static int xts_decrypt(struct skcipher_request *req)
 	struct skcipher_request *subreq = &rctx->subreq;
 	int err;
 
+	if (!req->cryptlen)
+		return 0;
+
 	err = xts_init_crypt(req, xts_decrypt_done) ?:
 	      xts_xor_tweak_pre(req, false) ?:
 	      crypto_skcipher_decrypt(subreq) ?:
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 10/22] crypto: atmel-aes - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (8 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 09/22] crypto: xts - add check for block " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 18:06   ` kernel test robot
  2020-08-07 16:19 ` [PATCH 11/22] crypto: artpec6 " Andrei Botila
                   ` (11 subsequent siblings)
  21 siblings, 1 reply; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Nicolas Ferre,
	Alexandre Belloni, Ludovic Desroches

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/atmel-aes.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/crypto/atmel-aes.c b/drivers/crypto/atmel-aes.c
index a6e14491e080..af789ac73478 100644
--- a/drivers/crypto/atmel-aes.c
+++ b/drivers/crypto/atmel-aes.c
@@ -1107,6 +1107,10 @@ static int atmel_aes_crypt(struct skcipher_request *req, unsigned long mode)
 		ctx->block_size = CFB64_BLOCK_SIZE;
 		break;
 
+	case AES_FLAGS_XTS:
+		if (!req->cryptlen)
+			return 0;
+
 	default:
 		ctx->block_size = AES_BLOCK_SIZE;
 		break;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 11/22] crypto: artpec6 - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (9 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 10/22] crypto: atmel-aes - add check for xts input " Andrei Botila
@ 2020-08-07 16:19 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 12/22] crypto: bcm " Andrei Botila
                   ` (10 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:19 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Jesper Nilsson,
	Lars Persson

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Jesper Nilsson <jesper.nilsson@axis.com>
Cc: Lars Persson <lars.persson@axis.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/axis/artpec6_crypto.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/crypto/axis/artpec6_crypto.c b/drivers/crypto/axis/artpec6_crypto.c
index 1a46eeddf082..243880c97629 100644
--- a/drivers/crypto/axis/artpec6_crypto.c
+++ b/drivers/crypto/axis/artpec6_crypto.c
@@ -1090,6 +1090,9 @@ static int artpec6_crypto_encrypt(struct skcipher_request *req)
 	void (*complete)(struct crypto_async_request *req);
 	int ret;
 
+	if (!req->cryptlen)
+		return 0;
+
 	req_ctx = skcipher_request_ctx(req);
 
 	switch (ctx->crypto_type) {
@@ -1135,6 +1138,9 @@ static int artpec6_crypto_decrypt(struct skcipher_request *req)
 	struct artpec6_crypto_request_context *req_ctx = NULL;
 	void (*complete)(struct crypto_async_request *req);
 
+	if (!req->cryptlen)
+		return 0;
+
 	req_ctx = skcipher_request_ctx(req);
 
 	switch (ctx->crypto_type) {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 12/22] crypto: bcm - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (10 preceding siblings ...)
  2020-08-07 16:19 ` [PATCH 11/22] crypto: artpec6 " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 13/22] crypto: cavium/cpt " Andrei Botila
                   ` (9 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Zhang Shengju,
	Tang Bin

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Zhang Shengju <zhangshengju@cmss.chinamobile.com>
Cc: Tang Bin <tangbin@cmss.chinamobile.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/bcm/cipher.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/crypto/bcm/cipher.c b/drivers/crypto/bcm/cipher.c
index 8a7fa1ae1ade..8a6f225f4db7 100644
--- a/drivers/crypto/bcm/cipher.c
+++ b/drivers/crypto/bcm/cipher.c
@@ -1754,6 +1754,9 @@ static int skcipher_enqueue(struct skcipher_request *req, bool encrypt)
 	    crypto_skcipher_ctx(crypto_skcipher_reqtfm(req));
 	int err;
 
+	if (!req->cryptlen && ctx->cipher.mode == CIPHER_MODE_XTS)
+		return 0;
+
 	flow_log("%s() enc:%u\n", __func__, encrypt);
 
 	rctx->gfp = (req->base.flags & (CRYPTO_TFM_REQ_MAY_BACKLOG |
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 13/22] crypto: cavium/cpt - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (11 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 12/22] crypto: bcm " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 14/22] crypto: cavium/nitrox " Andrei Botila
                   ` (8 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, George Cherian

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: George Cherian <gcherian@marvell.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/cavium/cpt/cptvf_algs.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/crypto/cavium/cpt/cptvf_algs.c b/drivers/crypto/cavium/cpt/cptvf_algs.c
index 5af0dc2a8909..edc18c8dd571 100644
--- a/drivers/crypto/cavium/cpt/cptvf_algs.c
+++ b/drivers/crypto/cavium/cpt/cptvf_algs.c
@@ -193,6 +193,7 @@ static inline void create_output_list(struct skcipher_request *req,
 static inline int cvm_enc_dec(struct skcipher_request *req, u32 enc)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct cvm_enc_ctx *ctx = crypto_skcipher_ctx(tfm);
 	struct cvm_req_ctx *rctx = skcipher_request_ctx(req);
 	u32 enc_iv_len = crypto_skcipher_ivsize(tfm);
 	struct fc_context *fctx = &rctx->fctx;
@@ -200,6 +201,9 @@ static inline int cvm_enc_dec(struct skcipher_request *req, u32 enc)
 	void *cdev = NULL;
 	int status;
 
+	if (!req->cryptlen && ctx->cipher_type == AES_XTS)
+		return 0;
+
 	memset(req_info, 0, sizeof(struct cpt_request_info));
 	req_info->may_sleep = (req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) != 0;
 	memset(fctx, 0, sizeof(struct fc_context));
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 14/22] crypto: cavium/nitrox - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (12 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 13/22] crypto: cavium/cpt " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 15/22] crypto: ccp " Andrei Botila
                   ` (7 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Srikanth Jampala, Nagadheeraj Rottela

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Srikanth Jampala <jsrikanth@marvell.com>
Cc: Nagadheeraj Rottela <rnagadheeraj@marvell.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/cavium/nitrox/nitrox_skcipher.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/crypto/cavium/nitrox/nitrox_skcipher.c b/drivers/crypto/cavium/nitrox/nitrox_skcipher.c
index a553ac65f324..d76589ebe354 100644
--- a/drivers/crypto/cavium/nitrox/nitrox_skcipher.c
+++ b/drivers/crypto/cavium/nitrox/nitrox_skcipher.c
@@ -249,10 +249,16 @@ static int nitrox_skcipher_crypt(struct skcipher_request *skreq, bool enc)
 	struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(skreq);
 	struct nitrox_crypto_ctx *nctx = crypto_skcipher_ctx(cipher);
 	struct nitrox_kcrypt_request *nkreq = skcipher_request_ctx(skreq);
+	struct crypto_tfm *tfm = crypto_skcipher_tfm(cipher);
 	int ivsize = crypto_skcipher_ivsize(cipher);
 	struct se_crypto_request *creq;
+	const char *name;
 	int ret;
 
+	name = crypto_tfm_alg_name(tfm);
+	if (!skreq->cryptlen && flexi_cipher_type(name) == CIPHER_AES_XTS)
+		return 0;
+
 	creq = &nkreq->creq;
 	creq->flags = skreq->base.flags;
 	creq->gfp = (skreq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP) ?
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 15/22] crypto: ccp - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (13 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 14/22] crypto: cavium/nitrox " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 16/22] crypto: ccree " Andrei Botila
                   ` (6 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Tom Lendacky,
	John Allen

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: John Allen <john.allen@amd.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/ccp/ccp-crypto-aes-xts.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/crypto/ccp/ccp-crypto-aes-xts.c b/drivers/crypto/ccp/ccp-crypto-aes-xts.c
index 6849261ca47d..6a93b54d388a 100644
--- a/drivers/crypto/ccp/ccp-crypto-aes-xts.c
+++ b/drivers/crypto/ccp/ccp-crypto-aes-xts.c
@@ -113,6 +113,9 @@ static int ccp_aes_xts_crypt(struct skcipher_request *req,
 	u32 unit_size;
 	int ret;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (!ctx->u.aes.key_len)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 16/22] crypto: ccree - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (14 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 15/22] crypto: ccp " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-08 12:10   ` Gilad Ben-Yossef
  2020-08-07 16:20 ` [PATCH 17/22] crypto: chelsio " Andrei Botila
                   ` (5 subsequent siblings)
  21 siblings, 1 reply; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Gilad Ben-Yossef

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.
This change has implications not only for xts(aes) but also for cts(cbc(aes))
and cts(cbc(paes)).

Cc: Gilad Ben-Yossef <gilad@benyossef.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/ccree/cc_cipher.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/crypto/ccree/cc_cipher.c b/drivers/crypto/ccree/cc_cipher.c
index 076669dc1035..112bb8b4dce6 100644
--- a/drivers/crypto/ccree/cc_cipher.c
+++ b/drivers/crypto/ccree/cc_cipher.c
@@ -912,17 +912,18 @@ static int cc_cipher_process(struct skcipher_request *req,
 
 	/* STAT_PHASE_0: Init and sanity checks */
 
-	if (validate_data_size(ctx_p, nbytes)) {
-		dev_dbg(dev, "Unsupported data size %d.\n", nbytes);
-		rc = -EINVAL;
-		goto exit_process;
-	}
 	if (nbytes == 0) {
 		/* No data to process is valid */
 		rc = 0;
 		goto exit_process;
 	}
 
+	if (validate_data_size(ctx_p, nbytes)) {
+		dev_dbg(dev, "Unsupported data size %d.\n", nbytes);
+		rc = -EINVAL;
+		goto exit_process;
+	}
+
 	if (ctx_p->fallback_on) {
 		struct skcipher_request *subreq = skcipher_request_ctx(req);
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 17/22] crypto: chelsio - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (15 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 16/22] crypto: ccree " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 18/22] crypto: hisilicon/sec " Andrei Botila
                   ` (4 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Ayush Sawal,
	Vinay Kumar Yadav, Rohit Maheshwari

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Ayush Sawal <ayush.sawal@chelsio.com>
Cc: Vinay Kumar Yadav <vinay.yadav@chelsio.com>
Cc: Rohit Maheshwari <rohitm@chelsio.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/chelsio/chcr_algo.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/crypto/chelsio/chcr_algo.c b/drivers/crypto/chelsio/chcr_algo.c
index 13b908ea4873..e9746580870a 100644
--- a/drivers/crypto/chelsio/chcr_algo.c
+++ b/drivers/crypto/chelsio/chcr_algo.c
@@ -1372,8 +1372,12 @@ static int chcr_aes_encrypt(struct skcipher_request *req)
 	int err;
 	struct uld_ctx *u_ctx = ULD_CTX(c_ctx(tfm));
 	struct chcr_context *ctx = c_ctx(tfm);
+	int subtype = get_cryptoalg_subtype(tfm);
 	unsigned int cpu;
 
+	if (!req->cryptlen && subtype == CRYPTO_ALG_SUB_TYPE_XTS)
+		return 0;
+
 	cpu = get_cpu();
 	reqctx->txqidx = cpu % ctx->ntxq;
 	reqctx->rxqidx = cpu % ctx->nrxq;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 18/22] crypto: hisilicon/sec - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (16 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 17/22] crypto: chelsio " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 19/22] crypto: inside-secure " Andrei Botila
                   ` (3 subsequent siblings)
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/hisilicon/sec/sec_algs.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/crypto/hisilicon/sec/sec_algs.c b/drivers/crypto/hisilicon/sec/sec_algs.c
index 8ca945ac297e..419ec4f23164 100644
--- a/drivers/crypto/hisilicon/sec/sec_algs.c
+++ b/drivers/crypto/hisilicon/sec/sec_algs.c
@@ -723,6 +723,10 @@ static int sec_alg_skcipher_crypto(struct skcipher_request *skreq,
 	bool split = skreq->src != skreq->dst;
 	gfp_t gfp = skreq->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP ? GFP_KERNEL : GFP_ATOMIC;
 
+	if (!skreq->cryptlen && (ctx->cipher_alg == SEC_C_AES_XTS_128 ||
+				 ctx->cipher_alg == SEC_C_AES_XTS_256))
+		return 0;
+
 	mutex_init(&sec_req->lock);
 	sec_req->req_base = &skreq->base;
 	sec_req->err = 0;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (17 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 18/22] crypto: hisilicon/sec " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-10 10:20   ` Van Leeuwen, Pascal
  2020-08-07 16:20 ` [PATCH 20/22] crypto: octeontx " Andrei Botila
                   ` (2 subsequent siblings)
  21 siblings, 1 reply; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Antoine Tenart

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Antoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/inside-secure/safexcel_cipher.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c
index 1ac3253b7903..03d06556ea98 100644
--- a/drivers/crypto/inside-secure/safexcel_cipher.c
+++ b/drivers/crypto/inside-secure/safexcel_cipher.c
@@ -2533,6 +2533,9 @@ static int safexcel_skcipher_aes_xts_cra_init(struct crypto_tfm *tfm)
 
 static int safexcel_encrypt_xts(struct skcipher_request *req)
 {
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < XTS_BLOCK_SIZE)
 		return -EINVAL;
 	return safexcel_queue_req(&req->base, skcipher_request_ctx(req),
@@ -2541,6 +2544,9 @@ static int safexcel_encrypt_xts(struct skcipher_request *req)
 
 static int safexcel_decrypt_xts(struct skcipher_request *req)
 {
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < XTS_BLOCK_SIZE)
 		return -EINVAL;
 	return safexcel_queue_req(&req->base, skcipher_request_ctx(req),
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 20/22] crypto: octeontx - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (18 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 19/22] crypto: inside-secure " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 16:20 ` [PATCH 21/22] crypto: qce " Andrei Botila
  2020-08-07 16:20 ` [PATCH 22/22] crypto: vmx " Andrei Botila
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Boris Brezillon, Arnaud Ebalard, Srujana Challa

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: Boris Brezillon <bbrezillon@kernel.org>
Cc: Arnaud Ebalard <arno@natisbad.org>
Cc: Srujana Challa <schalla@marvell.com>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/marvell/octeontx/otx_cptvf_algs.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c b/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
index 90bb31329d4b..ec13bc3f1766 100644
--- a/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
+++ b/drivers/crypto/marvell/octeontx/otx_cptvf_algs.c
@@ -340,11 +340,16 @@ static inline int cpt_enc_dec(struct skcipher_request *req, u32 enc)
 {
 	struct crypto_skcipher *stfm = crypto_skcipher_reqtfm(req);
 	struct otx_cpt_req_ctx *rctx = skcipher_request_ctx(req);
+	struct crypto_tfm *tfm = crypto_skcipher_tfm(stfm);
+	struct otx_cpt_enc_ctx *ctx = crypto_tfm_ctx(tfm);
 	struct otx_cpt_req_info *req_info = &rctx->cpt_req;
 	u32 enc_iv_len = crypto_skcipher_ivsize(stfm);
 	struct pci_dev *pdev;
 	int status, cpu_num;
 
+	if (!req->cryptlen && ctx->cipher_type == OTX_CPT_AES_XTS)
+		return 0;
+
 	/* Validate that request doesn't exceed maximum CPT supported size */
 	if (req->cryptlen > OTX_CPT_MAX_REQ_SIZE)
 		return -E2BIG;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 21/22] crypto: qce - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (19 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 20/22] crypto: octeontx " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  2020-08-07 17:59   ` Stanimir Varbanov
  2020-08-07 16:20 ` [PATCH 22/22] crypto: vmx " Andrei Botila
  21 siblings, 1 reply; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/qce/skcipher.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/crypto/qce/skcipher.c b/drivers/crypto/qce/skcipher.c
index 5630c5addd28..887fd4dc9b43 100644
--- a/drivers/crypto/qce/skcipher.c
+++ b/drivers/crypto/qce/skcipher.c
@@ -223,6 +223,9 @@ static int qce_skcipher_crypt(struct skcipher_request *req, int encrypt)
 	int keylen;
 	int ret;
 
+	if (!req->cryptlen && IS_XTS(rctx->flags))
+		return 0;
+
 	rctx->flags = tmpl->alg_flags;
 	rctx->flags |= encrypt ? QCE_ENCRYPT : QCE_DECRYPT;
 	keylen = IS_XTS(rctx->flags) ? ctx->enc_keylen >> 1 : ctx->enc_keylen;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [PATCH 22/22] crypto: vmx - add check for xts input length equal to zero
  2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
                   ` (20 preceding siblings ...)
  2020-08-07 16:20 ` [PATCH 21/22] crypto: qce " Andrei Botila
@ 2020-08-07 16:20 ` Andrei Botila
  21 siblings, 0 replies; 33+ messages in thread
From: Andrei Botila @ 2020-08-07 16:20 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Breno Leitão, Nayna Jain, Paulo Flabiano Smorigo,
	Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman

From: Andrei Botila <andrei.botila@nxp.com>

Standardize the way input lengths equal to 0 are handled in all skcipher
algorithms. All the algorithms return 0 for input lengths equal to zero.

Cc: "Breno Leitão" <leitao@debian.org>
Cc: Nayna Jain <nayna@linux.ibm.com>
Cc: Paulo Flabiano Smorigo <pfsmorigo@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
---
 drivers/crypto/vmx/aes_xts.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/crypto/vmx/aes_xts.c b/drivers/crypto/vmx/aes_xts.c
index 9fee1b1532a4..33107c9e2656 100644
--- a/drivers/crypto/vmx/aes_xts.c
+++ b/drivers/crypto/vmx/aes_xts.c
@@ -84,6 +84,9 @@ static int p8_aes_xts_crypt(struct skcipher_request *req, int enc)
 	u8 tweak[AES_BLOCK_SIZE];
 	int ret;
 
+	if (!req->cryptlen)
+		return 0;
+
 	if (req->cryptlen < AES_BLOCK_SIZE)
 		return -EINVAL;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [PATCH 21/22] crypto: qce - add check for xts input length equal to zero
  2020-08-07 16:20 ` [PATCH 21/22] crypto: qce " Andrei Botila
@ 2020-08-07 17:59   ` Stanimir Varbanov
  0 siblings, 0 replies; 33+ messages in thread
From: Stanimir Varbanov @ 2020-08-07 17:59 UTC (permalink / raw)
  To: Andrei Botila, Herbert Xu, David S. Miller
  Cc: linux-s390, Andrei Botila, x86, linux-kernel, linux-arm-kernel,
	linux-crypto, linuxppc-dev, linux-arm-kernel

Hi,

Thanks for the patch!

On 8/7/20 7:20 PM, Andrei Botila wrote:
> From: Andrei Botila <andrei.botila@nxp.com>
> 
> Standardize the way input lengths equal to 0 are handled in all skcipher
> algorithms. All the algorithms return 0 for input lengths equal to zero.
> 
> Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
> ---
>  drivers/crypto/qce/skcipher.c | 3 +++
>  1 file changed, 3 insertions(+)

Reviewed-by: Stanimir Varbanov <svarbanov@mm-sol.com>

> 
> diff --git a/drivers/crypto/qce/skcipher.c b/drivers/crypto/qce/skcipher.c
> index 5630c5addd28..887fd4dc9b43 100644
> --- a/drivers/crypto/qce/skcipher.c
> +++ b/drivers/crypto/qce/skcipher.c
> @@ -223,6 +223,9 @@ static int qce_skcipher_crypt(struct skcipher_request *req, int encrypt)
>  	int keylen;
>  	int ret;
>  
> +	if (!req->cryptlen && IS_XTS(rctx->flags))
> +		return 0;
> +
>  	rctx->flags = tmpl->alg_flags;
>  	rctx->flags |= encrypt ? QCE_ENCRYPT : QCE_DECRYPT;
>  	keylen = IS_XTS(rctx->flags) ? ctx->enc_keylen >> 1 : ctx->enc_keylen;
> 

-- 
regards,
Stan

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 10/22] crypto: atmel-aes - add check for xts input length equal to zero
  2020-08-07 16:19 ` [PATCH 10/22] crypto: atmel-aes - add check for xts input " Andrei Botila
@ 2020-08-07 18:06   ` kernel test robot
  0 siblings, 0 replies; 33+ messages in thread
From: kernel test robot @ 2020-08-07 18:06 UTC (permalink / raw)
  To: Andrei Botila, Herbert Xu, David S. Miller
  Cc: kbuild-all, netdev, linux-crypto, linux-arm-kernel, linux-kernel,
	linuxppc-dev, linux-s390, x86, linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 3238 bytes --]

Hi Andrei,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on cryptodev/master]
[also build test WARNING on crypto/master next-20200807]
[cannot apply to powerpc/next sparc-next/master v5.8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Andrei-Botila/crypto-add-check-for-xts-input-length-equal-to-zero/20200808-002648
base:   https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
config: arm-defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/crypto/atmel-aes.c: In function 'atmel_aes_crypt':
>> drivers/crypto/atmel-aes.c:1111:6: warning: this statement may fall through [-Wimplicit-fallthrough=]
    1111 |   if (!req->cryptlen)
         |      ^
   drivers/crypto/atmel-aes.c:1114:2: note: here
    1114 |  default:
         |  ^~~~~~~

vim +1111 drivers/crypto/atmel-aes.c

  1085	
  1086	static int atmel_aes_crypt(struct skcipher_request *req, unsigned long mode)
  1087	{
  1088		struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
  1089		struct atmel_aes_base_ctx *ctx = crypto_skcipher_ctx(skcipher);
  1090		struct atmel_aes_reqctx *rctx;
  1091		struct atmel_aes_dev *dd;
  1092	
  1093		switch (mode & AES_FLAGS_OPMODE_MASK) {
  1094		case AES_FLAGS_CFB8:
  1095			ctx->block_size = CFB8_BLOCK_SIZE;
  1096			break;
  1097	
  1098		case AES_FLAGS_CFB16:
  1099			ctx->block_size = CFB16_BLOCK_SIZE;
  1100			break;
  1101	
  1102		case AES_FLAGS_CFB32:
  1103			ctx->block_size = CFB32_BLOCK_SIZE;
  1104			break;
  1105	
  1106		case AES_FLAGS_CFB64:
  1107			ctx->block_size = CFB64_BLOCK_SIZE;
  1108			break;
  1109	
  1110		case AES_FLAGS_XTS:
> 1111			if (!req->cryptlen)
  1112				return 0;
  1113	
  1114		default:
  1115			ctx->block_size = AES_BLOCK_SIZE;
  1116			break;
  1117		}
  1118		ctx->is_aead = false;
  1119	
  1120		dd = atmel_aes_find_dev(ctx);
  1121		if (!dd)
  1122			return -ENODEV;
  1123	
  1124		rctx = skcipher_request_ctx(req);
  1125		rctx->mode = mode;
  1126	
  1127		if ((mode & AES_FLAGS_OPMODE_MASK) != AES_FLAGS_ECB &&
  1128		    !(mode & AES_FLAGS_ENCRYPT) && req->src == req->dst) {
  1129			unsigned int ivsize = crypto_skcipher_ivsize(skcipher);
  1130	
  1131			if (req->cryptlen >= ivsize)
  1132				scatterwalk_map_and_copy(rctx->lastc, req->src,
  1133							 req->cryptlen - ivsize,
  1134							 ivsize, 0);
  1135		}
  1136	
  1137		return atmel_aes_handle_queue(dd, &req->base);
  1138	}
  1139	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 52679 bytes --]

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 16/22] crypto: ccree - add check for xts input length equal to zero
  2020-08-07 16:20 ` [PATCH 16/22] crypto: ccree " Andrei Botila
@ 2020-08-08 12:10   ` Gilad Ben-Yossef
  0 siblings, 0 replies; 33+ messages in thread
From: Gilad Ben-Yossef @ 2020-08-08 12:10 UTC (permalink / raw)
  To: Andrei Botila
  Cc: Herbert Xu, David S. Miller, Linux Crypto Mailing List,
	Linux ARM, Linux kernel mailing list, linuxppc-dev, linux-s390,
	x86, linux-arm-kernel, Andrei Botila

On Fri, Aug 7, 2020 at 7:22 PM Andrei Botila <andrei.botila@oss.nxp.com> wrote:
>
> From: Andrei Botila <andrei.botila@nxp.com>
>
> Standardize the way input lengths equal to 0 are handled in all skcipher
> algorithms. All the algorithms return 0 for input lengths equal to zero.
> This change has implications not only for xts(aes) but also for cts(cbc(aes))
> and cts(cbc(paes)).
>
> Cc: Gilad Ben-Yossef <gilad@benyossef.com>
> Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
> ---
>  drivers/crypto/ccree/cc_cipher.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/crypto/ccree/cc_cipher.c b/drivers/crypto/ccree/cc_cipher.c
> index 076669dc1035..112bb8b4dce6 100644
> --- a/drivers/crypto/ccree/cc_cipher.c
> +++ b/drivers/crypto/ccree/cc_cipher.c
> @@ -912,17 +912,18 @@ static int cc_cipher_process(struct skcipher_request *req,
>
>         /* STAT_PHASE_0: Init and sanity checks */
>
> -       if (validate_data_size(ctx_p, nbytes)) {
> -               dev_dbg(dev, "Unsupported data size %d.\n", nbytes);
> -               rc = -EINVAL;
> -               goto exit_process;
> -       }
>         if (nbytes == 0) {
>                 /* No data to process is valid */
>                 rc = 0;
>                 goto exit_process;
>         }
>
> +       if (validate_data_size(ctx_p, nbytes)) {
> +               dev_dbg(dev, "Unsupported data size %d.\n", nbytes);
> +               rc = -EINVAL;
> +               goto exit_process;
> +       }
> +
>         if (ctx_p->fallback_on) {
>                 struct skcipher_request *subreq = skcipher_request_ctx(req);
>
> --
> 2.17.1
>

Acked-by: Gilad Ben-Yossef <gilad@benyossef.com>

Thanks,
Gilad

-- 
Gilad Ben-Yossef
Chief Coffee Drinker

values of β will give rise to dom!

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-07 16:20 ` [PATCH 19/22] crypto: inside-secure " Andrei Botila
@ 2020-08-10 10:20   ` Van Leeuwen, Pascal
  2020-08-10 13:45     ` Herbert Xu
  0 siblings, 1 reply; 33+ messages in thread
From: Van Leeuwen, Pascal @ 2020-08-10 10:20 UTC (permalink / raw)
  To: Andrei Botila, Herbert Xu, David S. Miller
  Cc: linux-crypto, linux-arm-kernel, linux-kernel, linuxppc-dev,
	linux-s390, x86, linux-arm-kernel, Andrei Botila, Antoine Tenart

> -----Original Message-----
> From: linux-crypto-owner@vger.kernel.org <linux-crypto-owner@vger.kernel.org> On Behalf Of Andrei Botila
> Sent: Friday, August 7, 2020 6:20 PM
> To: Herbert Xu <herbert@gondor.apana.org.au>; David S. Miller <davem@davemloft.net>
> Cc: linux-crypto@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> linux-s390@vger.kernel.org; x86@kernel.org; linux-arm-kernel@axis.com; Andrei Botila <andrei.botila@nxp.com>; Antoine Tenart
> <antoine.tenart@bootlin.com>
> Subject: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
>
> <<< External Email >>>
> From: Andrei Botila <andrei.botila@nxp.com>
>
> Standardize the way input lengths equal to 0 are handled in all skcipher
> algorithms. All the algorithms return 0 for input lengths equal to zero.
>
> Cc: Antoine Tenart <antoine.tenart@bootlin.com>
> Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
> ---
>  drivers/crypto/inside-secure/safexcel_cipher.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c
> index 1ac3253b7903..03d06556ea98 100644
> --- a/drivers/crypto/inside-secure/safexcel_cipher.c
> +++ b/drivers/crypto/inside-secure/safexcel_cipher.c
> @@ -2533,6 +2533,9 @@ static int safexcel_skcipher_aes_xts_cra_init(struct crypto_tfm *tfm)
>
>  static int safexcel_encrypt_xts(struct skcipher_request *req)
>  {
> +if (!req->cryptlen)
> +return 0;
> +
>  if (req->cryptlen < XTS_BLOCK_SIZE)
>  return -EINVAL;
>  return safexcel_queue_req(&req->base, skcipher_request_ctx(req),
> @@ -2541,6 +2544,9 @@ static int safexcel_encrypt_xts(struct skcipher_request *req)
>
>  static int safexcel_decrypt_xts(struct skcipher_request *req)
>  {
> +if (!req->cryptlen)
> +return 0;
> +
>  if (req->cryptlen < XTS_BLOCK_SIZE)
>  return -EINVAL;
>  return safexcel_queue_req(&req->base, skcipher_request_ctx(req),
> --
> 2.17.1

With all due respect, but this makes no sense.

For XTS, any length below 16 is illegal, as applying CTS in order to handle non-cipher
block multiples (16 bytes in case of AES) requires _more_ data than 1 cipher block.

There is no benefit to explicitly check for zero length if there is already a check for
less-than-16. That's just wasting CPU cycles and  a branch predictor entry, for no
benefit whatsoever. (except for academic "alignment with other ciphers").

XTS has very specific use cases. No one in their right mind would call it for a
situation where it can't be applied in the first place, e.g. anything < 16 bytes.

Regards,
Pascal van Leeuwen
Silicon IP Architect Multi-Protocol Engines, Rambus Security
Rambus ROTW Holding BV
+31-73 6581953

Note: The Inside Secure/Verimatrix Silicon IP team was recently acquired by Rambus.
Please be so kind to update your e-mail address book with my new e-mail address.


** This message and any attachments are for the sole use of the intended recipient(s). It may contain information that is confidential and privileged. If you are not the intended recipient of this message, you are prohibited from printing, copying, forwarding or saving it. Please delete the message and attachments and notify the sender immediately. **

Rambus Inc.<http://www.rambus.com>


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-10 10:20   ` Van Leeuwen, Pascal
@ 2020-08-10 13:45     ` Herbert Xu
  2020-08-10 14:33       ` Horia Geantă
  0 siblings, 1 reply; 33+ messages in thread
From: Herbert Xu @ 2020-08-10 13:45 UTC (permalink / raw)
  To: Van Leeuwen, Pascal
  Cc: Andrei Botila, David S. Miller, linux-crypto, linux-arm-kernel,
	linux-kernel, linuxppc-dev, linux-s390, x86, linux-arm-kernel,
	Andrei Botila, Antoine Tenart

On Mon, Aug 10, 2020 at 10:20:20AM +0000, Van Leeuwen, Pascal wrote:
>
> With all due respect, but this makes no sense.

I agree.  This is a lot of churn for no gain.

Thanks,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-10 13:45     ` Herbert Xu
@ 2020-08-10 14:33       ` Horia Geantă
  2020-08-10 17:03         ` Eric Biggers
  2020-08-10 21:37         ` Van Leeuwen, Pascal
  0 siblings, 2 replies; 33+ messages in thread
From: Horia Geantă @ 2020-08-10 14:33 UTC (permalink / raw)
  To: Herbert Xu, Van Leeuwen, Pascal
  Cc: Andrei Botila (OSS),
	David S. Miller, linux-crypto, linux-arm-kernel, linux-kernel,
	linuxppc-dev, linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Antoine Tenart

On 8/10/2020 4:45 PM, Herbert Xu wrote:
> On Mon, Aug 10, 2020 at 10:20:20AM +0000, Van Leeuwen, Pascal wrote:
>>
>> With all due respect, but this makes no sense.
> 
> I agree.  This is a lot of churn for no gain.
> 
I would say the gain is that all skcipher algorithms would behave the same
when input length equals zero - i.e. treat the request as a no-op.

We can't say "no input" has any meaning to the other skcipher algorithms,
but the convention is to accept this case and just return 0.
I don't see why XTS has to be handled differently.

Thanks,
Horia

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-10 14:33       ` Horia Geantă
@ 2020-08-10 17:03         ` Eric Biggers
  2020-08-11 15:28           ` Horia Geantă
  2020-08-10 21:37         ` Van Leeuwen, Pascal
  1 sibling, 1 reply; 33+ messages in thread
From: Eric Biggers @ 2020-08-10 17:03 UTC (permalink / raw)
  To: Horia Geantă
  Cc: Herbert Xu, Van Leeuwen, Pascal, Andrei Botila (OSS),
	David S. Miller, linux-crypto, linux-arm-kernel, linux-kernel,
	linuxppc-dev, linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Antoine Tenart

On Mon, Aug 10, 2020 at 05:33:39PM +0300, Horia Geantă wrote:
> On 8/10/2020 4:45 PM, Herbert Xu wrote:
> > On Mon, Aug 10, 2020 at 10:20:20AM +0000, Van Leeuwen, Pascal wrote:
> >>
> >> With all due respect, but this makes no sense.
> > 
> > I agree.  This is a lot of churn for no gain.
> > 
> I would say the gain is that all skcipher algorithms would behave the same
> when input length equals zero - i.e. treat the request as a no-op.
> 
> We can't say "no input" has any meaning to the other skcipher algorithms,
> but the convention is to accept this case and just return 0.
> I don't see why XTS has to be handled differently.
> 

CTS also rejects empty inputs.

The rule it follows is just that all input lengths >= blocksize are allowed.
Input lengths < blocksize aren't allowed.

- Eric

^ permalink raw reply	[flat|nested] 33+ messages in thread

* RE: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-10 14:33       ` Horia Geantă
  2020-08-10 17:03         ` Eric Biggers
@ 2020-08-10 21:37         ` Van Leeuwen, Pascal
  1 sibling, 0 replies; 33+ messages in thread
From: Van Leeuwen, Pascal @ 2020-08-10 21:37 UTC (permalink / raw)
  To: Horia Geantă, Herbert Xu
  Cc: Andrei Botila (OSS),
	David S. Miller, linux-crypto, linux-arm-kernel, linux-kernel,
	linuxppc-dev, linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Antoine Tenart

> -----Original Message-----
> From: Horia Geantă <horia.geanta@nxp.com>
> Sent: Monday, August 10, 2020 4:34 PM
> To: Herbert Xu <herbert@gondor.apana.org.au>; Van Leeuwen, Pascal <pvanleeuwen@rambus.com>
> Cc: Andrei Botila (OSS) <andrei.botila@oss.nxp.com>; David S. Miller <davem@davemloft.net>; linux-crypto@vger.kernel.org; linux-
> arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org; linux-s390@vger.kernel.org;
> x86@kernel.org; linux-arm-kernel@axis.com; Andrei Botila <andrei.botila@nxp.com>; Antoine Tenart <antoine.tenart@bootlin.com>
> Subject: Re: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
>
> <<< External Email >>>
> On 8/10/2020 4:45 PM, Herbert Xu wrote:
> > On Mon, Aug 10, 2020 at 10:20:20AM +0000, Van Leeuwen, Pascal wrote:
> >>
> >> With all due respect, but this makes no sense.
> >
> > I agree.  This is a lot of churn for no gain.
> >
> I would say the gain is that all skcipher algorithms would behave the same
> when input length equals zero - i.e. treat the request as a no-op.
>
XTS already behaves differently because it can accept any byte amount as long
as it is not in the range 0 -16. So far, you got an EINVAL error for lengths < 16.
The special exception on top of that for length 0 does not improve anything.

Treating a request of length 0 as a no-op is not a useful feature here, as there
is no use case where that would make sense. XTS encrypts blocks (usually disk
sectors), and cannot be chained. So an attempt to encrypt a zero length block
is most certainly some kind of error (e.g. trying to use XTS for something it
was not designed to do - big security mistake!).

> We can't say "no input" has any meaning to the other skcipher algorithms,
> but the convention is to accept this case and just return 0.
> I don't see why XTS has to be handled differently.
>
I don't see why you would blindly follow some historical convention ...
unless maybe there was some existing real use case that would benefit?

BTW: for generic ciphers I could think of some use cases where the zero
length request being a no-op makes sense if the application does not
bother to check how much data it has gathered to process (which may be
nothing), but I can't see how this could apply to XTS, being block-based.

> Thanks,
> Horia

Regards,
Pascal van Leeuwen
Silicon IP Architect Multi-Protocol Engines, Rambus Security
Rambus ROTW Holding BV
+31-73 6581953

Note: The Inside Secure/Verimatrix Silicon IP team was recently acquired by Rambus.
Please be so kind to update your e-mail address book with my new e-mail address.


** This message and any attachments are for the sole use of the intended recipient(s). It may contain information that is confidential and privileged. If you are not the intended recipient of this message, you are prohibited from printing, copying, forwarding or saving it. Please delete the message and attachments and notify the sender immediately. **

Rambus Inc.<http://www.rambus.com>

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-10 17:03         ` Eric Biggers
@ 2020-08-11 15:28           ` Horia Geantă
  2020-08-12  0:36             ` Herbert Xu
  0 siblings, 1 reply; 33+ messages in thread
From: Horia Geantă @ 2020-08-11 15:28 UTC (permalink / raw)
  To: Eric Biggers
  Cc: Herbert Xu, Van Leeuwen, Pascal, Andrei Botila (OSS),
	David S. Miller, linux-crypto, linux-arm-kernel, linux-kernel,
	linuxppc-dev, linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Antoine Tenart

On 8/10/2020 8:03 PM, Eric Biggers wrote:
> On Mon, Aug 10, 2020 at 05:33:39PM +0300, Horia Geantă wrote:
>> On 8/10/2020 4:45 PM, Herbert Xu wrote:
>>> On Mon, Aug 10, 2020 at 10:20:20AM +0000, Van Leeuwen, Pascal wrote:
>>>>
>>>> With all due respect, but this makes no sense.
>>>
>>> I agree.  This is a lot of churn for no gain.
>>>
>> I would say the gain is that all skcipher algorithms would behave the same
>> when input length equals zero - i.e. treat the request as a no-op.
>>
>> We can't say "no input" has any meaning to the other skcipher algorithms,
>> but the convention is to accept this case and just return 0.
>> I don't see why XTS has to be handled differently.
>>
> 
> CTS also rejects empty inputs.
> 
> The rule it follows is just that all input lengths >= blocksize are allowed.
> Input lengths < blocksize aren't allowed.
> 
Indeed, thanks.

What about, for example, CBC?
AFAICT cbc(aes) with input length = 0 is valid.

Same for CTR (with the note that blocksize = 1) and several other algorithms
mentioned in the cover letter.

What's the rule in these cases?

Thanks,
Horia

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 19/22] crypto: inside-secure - add check for xts input length equal to zero
  2020-08-11 15:28           ` Horia Geantă
@ 2020-08-12  0:36             ` Herbert Xu
  0 siblings, 0 replies; 33+ messages in thread
From: Herbert Xu @ 2020-08-12  0:36 UTC (permalink / raw)
  To: Horia Geantă
  Cc: Eric Biggers, Van Leeuwen, Pascal, Andrei Botila (OSS),
	David S. Miller, linux-crypto, linux-arm-kernel, linux-kernel,
	linuxppc-dev, linux-s390, x86, linux-arm-kernel, Andrei Botila,
	Antoine Tenart

On Tue, Aug 11, 2020 at 06:28:39PM +0300, Horia Geantă wrote:
>
> What about, for example, CBC?
> AFAICT cbc(aes) with input length = 0 is valid.

That's just because CBC accepts any input which is a multiple
of blocksize.

> Same for CTR (with the note that blocksize = 1) and several other algorithms
> mentioned in the cover letter.

CTR accepts any input size.

> What's the rule in these cases?

What input size is accepted depends on the algorithm.

Cheers,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2020-08-12  0:37 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-07 16:19 [PATCH 00/22] crypto: add check for xts input length equal to zero Andrei Botila
2020-08-07 16:19 ` [PATCH 01/22] crypto: arm/aes-ce - " Andrei Botila
2020-08-07 16:19 ` [PATCH 02/22] crypto: arm/aes-neonbs " Andrei Botila
2020-08-07 16:19 ` [PATCH 03/22] crypto: arm64/aes " Andrei Botila
2020-08-07 16:19 ` [PATCH 04/22] crypto: arm64/aes-neonbs " Andrei Botila
2020-08-07 16:19 ` [PATCH 05/22] crypto: powerpc/aes-spe " Andrei Botila
2020-08-07 16:19 ` [PATCH 06/22] crypto: s390/aes " Andrei Botila
2020-08-07 16:19 ` [PATCH 07/22] crypto: s390/paes " Andrei Botila
2020-08-07 16:19 ` [PATCH 08/22] crypto: x86/glue_helper " Andrei Botila
2020-08-07 16:19 ` [PATCH 09/22] crypto: xts - add check for block " Andrei Botila
2020-08-07 16:19 ` [PATCH 10/22] crypto: atmel-aes - add check for xts input " Andrei Botila
2020-08-07 18:06   ` kernel test robot
2020-08-07 16:19 ` [PATCH 11/22] crypto: artpec6 " Andrei Botila
2020-08-07 16:20 ` [PATCH 12/22] crypto: bcm " Andrei Botila
2020-08-07 16:20 ` [PATCH 13/22] crypto: cavium/cpt " Andrei Botila
2020-08-07 16:20 ` [PATCH 14/22] crypto: cavium/nitrox " Andrei Botila
2020-08-07 16:20 ` [PATCH 15/22] crypto: ccp " Andrei Botila
2020-08-07 16:20 ` [PATCH 16/22] crypto: ccree " Andrei Botila
2020-08-08 12:10   ` Gilad Ben-Yossef
2020-08-07 16:20 ` [PATCH 17/22] crypto: chelsio " Andrei Botila
2020-08-07 16:20 ` [PATCH 18/22] crypto: hisilicon/sec " Andrei Botila
2020-08-07 16:20 ` [PATCH 19/22] crypto: inside-secure " Andrei Botila
2020-08-10 10:20   ` Van Leeuwen, Pascal
2020-08-10 13:45     ` Herbert Xu
2020-08-10 14:33       ` Horia Geantă
2020-08-10 17:03         ` Eric Biggers
2020-08-11 15:28           ` Horia Geantă
2020-08-12  0:36             ` Herbert Xu
2020-08-10 21:37         ` Van Leeuwen, Pascal
2020-08-07 16:20 ` [PATCH 20/22] crypto: octeontx " Andrei Botila
2020-08-07 16:20 ` [PATCH 21/22] crypto: qce " Andrei Botila
2020-08-07 17:59   ` Stanimir Varbanov
2020-08-07 16:20 ` [PATCH 22/22] crypto: vmx " Andrei Botila

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).