linux/drivers/crypto
Jan Engelhardt 3f6b75439d crypto: n2 - cure use after free
commit 203f45003a upstream.

queue_cache_init is first called for the Control Word Queue
(n2_crypto_probe). At that time, queue_cache[0] is NULL and a new
kmem_cache will be allocated. If the subsequent n2_register_algs call
fails, the kmem_cache will be released in queue_cache_destroy, but
queue_cache_init[0] is not set back to NULL.

So when the Module Arithmetic Unit gets probed next (n2_mau_probe),
queue_cache_init will not allocate a kmem_cache again, but leave it
as its bogus value, causing a BUG() to trigger when queue_cache[0] is
eventually passed to kmem_cache_zalloc:

	n2_crypto: Found N2CP at /virtual-devices@100/n2cp@7
	n2_crypto: Registered NCS HVAPI version 2.0
	called queue_cache_init
	n2_crypto: md5 alg registration failed
	n2cp f028687c: /virtual-devices@100/n2cp@7: Unable to register algorithms.
	called queue_cache_destroy
	n2cp: probe of f028687c failed with error -22
	n2_crypto: Found NCP at /virtual-devices@100/ncp@6
	n2_crypto: Registered NCS HVAPI version 2.0
	called queue_cache_init
	kernel BUG at mm/slab.c:2993!
	Call Trace:
	 [0000000000604488] kmem_cache_alloc+0x1a8/0x1e0
                  (inlined) kmem_cache_zalloc
                  (inlined) new_queue
                  (inlined) spu_queue_setup
                  (inlined) handle_exec_unit
	 [0000000010c61eb4] spu_mdesc_scan+0x1f4/0x460 [n2_crypto]
	 [0000000010c62b80] n2_mau_probe+0x100/0x220 [n2_crypto]
	 [000000000084b174] platform_drv_probe+0x34/0xc0

Signed-off-by: Jan Engelhardt <jengelh@inai.de>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2018-03-03 15:52:05 +00:00
..
amcc crypto: crypto4xx - Remove redundant dev_set_drvdata 2013-12-30 20:19:15 +08:00
caam crypto: caam - fix incorrect define 2018-02-13 18:42:14 +00:00
ccp crypto: ccp - Fix AES XTS error for request sizes above 4096 2016-08-22 22:38:05 +01:00
nx crypto: nx - off by one bug in nx_of_update_msc() 2016-11-20 01:16:53 +00:00
ux500 crypto: ux500 - memmove the right size 2016-08-22 22:38:14 +01:00
atmel-aes-regs.h crypto: atmel - add Atmel AES driver 2012-07-11 11:07:40 +08:00
atmel-aes.c crypto: atmel-aes - check alignment of cfb64 mode 2014-04-28 18:21:19 +08:00
atmel-sha-regs.h crypto: atmel-sha - add support for latest release of the IP (0x410) 2013-03-10 16:46:42 +08:00
atmel-sha.c crypto: atmel - only treat EBUSY as transient if backlog 2017-10-12 15:28:05 +01:00
atmel-tdes-regs.h crypto: atmel-tdes - add support for latest release of the IP (0x700) 2013-03-10 16:46:42 +08:00
atmel-tdes.c crypto: atmel-tdes - add support for Device Tree 2013-12-12 18:39:35 +01:00
bfin_crc.c cryptoo: bfin_crc - avoid get physical address of coherence memory by dma_map_single 2014-04-16 20:40:16 +08:00
bfin_crc.h crypto: bfin_crc - access crc registers by readl and writel functions 2014-04-16 20:40:15 +08:00
geode-aes.c crypto: geode - Don't use tfm->__crt_alg->cra_name directly 2014-05-22 21:03:13 +08:00
geode-aes.h crypto: geode - Consistently use AES_KEYSIZE_128 2014-05-22 21:03:12 +08:00
hifn_795x.c crypto: hifn_795x - Pass correct pointer to free_irq() 2013-05-28 15:43:04 +08:00
ixp4xx_crypto.c crypto: ixp4xx - Remove bogus BUG_ON on scattered dst buffer 2015-08-27 12:08:06 +01:00
Kconfig crypto/nx: disable NX on little endian builds 2014-06-11 17:03:19 +10:00
Makefile crypto: tegra - remove driver 2014-02-27 05:56:57 +08:00
mv_cesa.c crypto: cesa - tfm->__crt_alg->cra_type directly 2014-05-22 21:03:17 +08:00
mv_cesa.h crypto: mv_cesa - Add sha1 and hmac(sha1) async hash drivers 2010-04-13 16:50:49 +08:00
mxs-dcp.c crypto: dcp - tfm->__crt_alg->cra_name directly 2014-05-22 21:03:15 +08:00
n2_asm.S crypto: n2 - Add Niagara2 crypto driver 2010-05-19 14:14:04 +10:00
n2_core.c crypto: n2 - cure use after free 2018-03-03 15:52:05 +00:00
n2_core.h crypto: n2 - Add Niagara2 crypto driver 2010-05-19 14:14:04 +10:00
omap-aes.c crypto: omap-aes - Fix support for unequal lengths 2015-05-06 11:33:03 +01:00
omap-des.c crypto: omap-des - Fix unmapping of dma channels 2015-08-10 09:54:10 +01:00
omap-sham.c crypto: omap-sham - Map SG pages if they are HIGHMEM before accessing 2014-03-10 20:17:13 +08:00
padlock-aes.c crypto: prefix module autoloading with "crypto-" 2015-02-04 10:57:48 +00:00
padlock-sha.c crypto: prefix module autoloading with "crypto-" 2015-02-04 10:57:48 +00:00
picoxcell_crypto.c crypto: picoxcell - Use devm_ioremap_resource() 2014-02-27 05:56:47 +08:00
picoxcell_crypto_regs.h crypto: picoxcell - add support for the picoxcell crypto engines 2011-02-21 22:42:40 +11:00
s5p-sss.c crypto: s5p-sss - fix incorrect usage of scatterlists api 2016-08-22 22:37:52 +01:00
sahara.c crypto: sahara - tfm->__crt_alg->cra_name directly 2014-05-22 21:03:16 +08:00
talitos.c crypto: talitos - Don't provide setkey for non hmac hashing algs. 2018-01-01 20:51:34 +00:00
talitos.h crypto: talitos - add sha224, sha384 and sha512 to existing AEAD algorithms 2012-07-11 11:08:29 +08:00