linux/drivers/crypto
Ard Biesheuvel ed527b13d8 crypto: caam - limit output IV to CBC to work around CTR mode DMA issue
The CAAM driver currently violates an undocumented and slightly
controversial requirement imposed by the crypto stack that a buffer
referred to by the request structure via its virtual address may not
be modified while any scatterlists passed via the same request
structure are mapped for inbound DMA.

This may result in errors like

  alg: aead: decryption failed on test 1 for gcm_base(ctr-aes-caam,ghash-generic): ret=74
  alg: aead: Failed to load transform for gcm(aes): -2

on non-cache coherent systems, due to the fact that the GCM driver
passes an IV buffer by virtual address which shares a cacheline with
the auth_tag buffer passed via a scatterlist, resulting in corruption
of the auth_tag when the IV is updated while the DMA mapping is live.

Since the IV that is returned to the caller is only valid for CBC mode,
and given that the in-kernel users of CBC (such as CTS) don't trigger the
same issue as the GCM driver, let's just disable the output IV generation
for all modes except CBC for the time being.

Fixes: 854b06f768 ("crypto: caam - properly set IV after {en,de}crypt")
Cc: Horia Geanta <horia.geanta@nxp.com>
Cc: Iuliana Prodan <iuliana.prodan@nxp.com>
Reported-by: Sascha Hauer <s.hauer@pengutronix.de>
Cc: <stable@vger.kernel.org>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Horia Geanta <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2019-06-06 14:44:16 +08:00
..
amcc crypto: crypto4xx - block ciphers should only accept complete blocks 2019-05-23 14:13:09 +08:00
axis crypto: shash - remove shash_desc::flags 2019-04-25 15:38:12 +08:00
bcm crypto: shash - remove shash_desc::flags 2019-04-25 15:38:12 +08:00
caam crypto: caam - limit output IV to CBC to work around CTR mode DMA issue 2019-06-06 14:44:16 +08:00
cavium crypto: cryptd - move kcrypto_wq into cryptd 2019-05-30 15:28:41 +08:00
ccp crypto: ccp - Fix 3DES complaint from ccp-crypto module 2019-05-23 14:01:07 +08:00
ccree crypto: ccree - use a proper le32 type for le32 val 2019-05-03 14:03:30 +08:00
chelsio crypto: chelsio - count incomplete block in IV 2019-05-09 13:17:23 +08:00
hisilicon crypto: hisilicon - Forbid 2-key 3DES in FIPS mode 2019-04-18 22:15:00 +08:00
inside-secure crypto: inside-secure - do not rely on the hardware last bit for result descriptors 2019-06-06 14:38:56 +08:00
marvell crypto: marvell - Forbid 2-key 3DES in FIPS mode 2019-04-18 22:15:00 +08:00
mediatek crypto: shash - remove shash_desc::flags 2019-04-25 15:38:12 +08:00
nx crypto: nx - don't abuse shash MAY_SLEEP flag 2019-04-25 15:38:12 +08:00
qat crypto: qat - do not offload zero length requests 2019-05-23 14:01:03 +08:00
qce crypto: qce - Forbid 2-key 3DES in FIPS mode 2019-04-18 22:15:01 +08:00
rockchip crypto: rockchip - update IV buffer to contain the next IV 2019-04-18 22:15:04 +08:00
stm32 crypto: stm32/cryp - update to return iv_out 2019-05-03 14:03:29 +08:00
sunxi-ss crypto: sun4i-ss - fallback when length is not multiple of blocksize 2019-04-25 15:38:13 +08:00
ux500 crypto: ux500 - use ccflags-y instead of CFLAGS_<basename>.o 2019-04-25 15:40:39 +08:00
virtio crypto: virtio - clean up indentation, replace spaces with tab 2019-01-11 14:16:56 +08:00
vmx crypto: vmx - convert to skcipher API 2019-05-30 15:28:40 +08:00
atmel-aes-regs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
atmel-aes.c crypto: atmel - switch to SPDX license identifiers 2018-09-04 11:37:04 +08:00
atmel-authenc.h crypto: atmel - switch to SPDX license identifiers 2018-09-04 11:37:04 +08:00
atmel-ecc.c crypto: atmel-ecc - factor out code that can be shared 2019-05-30 15:35:45 +08:00
atmel-i2c.c crypto: atmel - Fix sparse endianness warnings 2019-06-06 14:38:57 +08:00
atmel-i2c.h crypto: atmel - Fix sparse endianness warnings 2019-06-06 14:38:57 +08:00
atmel-sha204a.c crypto: atmel-i2c - add support for SHA204A random number generator 2019-05-30 15:35:45 +08:00
atmel-sha-regs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
atmel-sha.c crypto: atmel - switch to SPDX license identifiers 2018-09-04 11:37:04 +08:00
atmel-tdes-regs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
atmel-tdes.c crypto: atmel - remove set but not used variable 'alg_name' 2019-05-03 14:03:29 +08:00
exynos-rng.c crypto: drivers - simplify getting .drvdata 2018-04-28 16:09:35 +08:00
geode-aes.c crypto: drop mask=CRYPTO_ALG_ASYNC from 'cipher' tfm allocations 2018-11-20 14:26:55 +08:00
geode-aes.h
hifn_795x.c crypto: hifn_795x - Forbid 2-key 3DES in FIPS mode 2019-04-18 22:15:00 +08:00
img-hash.c
ixp4xx_crypto.c crypto: ixp4xx - Fix cross-compile errors due to type mismatch 2019-05-30 15:30:05 +08:00
Kconfig crypto: atmel-i2c - add support for SHA204A random number generator 2019-05-30 15:35:45 +08:00
Makefile crypto: atmel-i2c - add support for SHA204A random number generator 2019-05-30 15:35:45 +08:00
mxs-dcp.c crypto: mxs-dcp - remove set but not used variable 'fini' 2019-04-18 22:14:58 +08:00
n2_asm.S License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
n2_core.c crypto: shash - remove shash_desc::flags 2019-04-25 15:38:12 +08:00
n2_core.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
omap-aes-gcm.c
omap-aes.c crypto: skcipher - remove remnants of internal IV generators 2018-12-23 11:52:45 +08:00
omap-aes.h crypto: omap-aes - Remove VLA usage of skcipher 2018-09-28 12:46:09 +08:00
omap-crypto.c crypto: omap-crypto - Verify page zone scatterlists before starting DMA 2018-03-09 22:45:36 +08:00
omap-crypto.h
omap-des.c crypto: omap - Forbid 2-key 3DES in FIPS mode 2019-04-18 22:15:00 +08:00
omap-sham.c crypto: shash - remove shash_desc::flags 2019-04-25 15:38:12 +08:00
padlock-aes.c crypto: padlock-aes - Fix Nano workaround data corruption 2018-07-20 13:47:42 +08:00
padlock-sha.c crypto: shash - remove shash_desc::flags 2019-04-25 15:38:12 +08:00
picoxcell_crypto_regs.h
picoxcell_crypto.c crypto: picoxcell - Use dev_get_drvdata() 2019-05-03 14:03:29 +08:00
qcom-rng.c crypto: qcom-rng - Add ACPI support 2018-07-27 19:04:32 +08:00
s5p-sss.c crypto: shash - remove shash_desc::flags 2019-04-25 15:38:12 +08:00
sahara.c crypto: sahara - Convert IS_ENABLED uses to __is_defined 2019-04-18 22:14:58 +08:00
talitos.c crypto: talitos - use SPDX-License-Identifier 2019-05-30 15:30:05 +08:00
talitos.h crypto: talitos - use SPDX-License-Identifier 2019-05-30 15:30:05 +08:00