linux-stable/drivers/crypto
Andrey Skvortsov dc60b25540 crypto: sun8i-ce - Fix use after free in unprepare
commit 1834200384 upstream.

sun8i_ce_cipher_unprepare should be called before
crypto_finalize_skcipher_request, because client callbacks may
immediately free memory, that isn't needed anymore. But it will be
used by unprepare after free. Before removing prepare/unprepare
callbacks it was handled by crypto engine in crypto_finalize_request.

Usually that results in a pointer dereference problem during a in
crypto selftest.
 Unable to handle kernel NULL pointer dereference at
                                      virtual address 0000000000000030
 Mem abort info:
   ESR = 0x0000000096000004
   EC = 0x25: DABT (current EL), IL = 32 bits
   SET = 0, FnV = 0
   EA = 0, S1PTW = 0
   FSC = 0x04: level 0 translation fault
 Data abort info:
   ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
 user pgtable: 4k pages, 48-bit VAs, pgdp=000000004716d000
 [0000000000000030] pgd=0000000000000000, p4d=0000000000000000
 Internal error: Oops: 0000000096000004 [#1] SMP

This problem is detected by KASAN as well.
 ==================================================================
 BUG: KASAN: slab-use-after-free in sun8i_ce_cipher_do_one+0x6e8/0xf80 [sun8i_ce]
 Read of size 8 at addr ffff00000dcdc040 by task 1c15000.crypto-/373

 Hardware name: Pine64 PinePhone (1.2) (DT)
 Call trace:
  dump_backtrace+0x9c/0x128
  show_stack+0x20/0x38
  dump_stack_lvl+0x48/0x60
  print_report+0xf8/0x5d8
  kasan_report+0x90/0xd0
  __asan_load8+0x9c/0xc0
  sun8i_ce_cipher_do_one+0x6e8/0xf80 [sun8i_ce]
  crypto_pump_work+0x354/0x620 [crypto_engine]
  kthread_worker_fn+0x244/0x498
  kthread+0x168/0x178
  ret_from_fork+0x10/0x20

 Allocated by task 379:
  kasan_save_stack+0x3c/0x68
  kasan_set_track+0x2c/0x40
  kasan_save_alloc_info+0x24/0x38
  __kasan_kmalloc+0xd4/0xd8
  __kmalloc+0x74/0x1d0
  alg_test_skcipher+0x90/0x1f0
  alg_test+0x24c/0x830
  cryptomgr_test+0x38/0x60
  kthread+0x168/0x178
  ret_from_fork+0x10/0x20

 Freed by task 379:
  kasan_save_stack+0x3c/0x68
  kasan_set_track+0x2c/0x40
  kasan_save_free_info+0x38/0x60
  __kasan_slab_free+0x100/0x170
  slab_free_freelist_hook+0xd4/0x1e8
  __kmem_cache_free+0x15c/0x290
  kfree+0x74/0x100
  kfree_sensitive+0x80/0xb0
  alg_test_skcipher+0x12c/0x1f0
  alg_test+0x24c/0x830
  cryptomgr_test+0x38/0x60
  kthread+0x168/0x178
  ret_from_fork+0x10/0x20

 The buggy address belongs to the object at ffff00000dcdc000
  which belongs to the cache kmalloc-256 of size 256
 The buggy address is located 64 bytes inside of
  freed 256-byte region [ffff00000dcdc000, ffff00000dcdc100)

Signed-off-by: Andrey Skvortsov <andrej.skvortzov@gmail.com>
Fixes: 4136212ab1 ("crypto: sun8i-ce - Remove prepare/unprepare request")
Cc: <stable@vger.kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-04-03 15:28:40 +02:00
..
allwinner crypto: sun8i-ce - Fix use after free in unprepare 2024-04-03 15:28:40 +02:00
amcc
amlogic crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
aspeed crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
axis
bcm crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
caam crypto: caam/jr - fix Chacha20 + Poly1305 self test failure 2023-11-20 11:59:19 +01:00
cavium
ccp crypto: ccp - Avoid discarding errors in psp_send_platform_access_msg() 2024-03-26 18:19:51 -04:00
ccree crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
chelsio crypto: chelsio - Remove unused declarations 2023-08-25 18:46:55 +08:00
gemini crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
hisilicon crypto: hisilicon/zip - save capability registers in probe process 2024-01-25 15:35:17 -08:00
inside-secure crypto: safexcel - Add error handling for dma_map_sg() calls 2024-01-25 15:35:16 -08:00
intel crypto: qat - resolve race condition during AER recovery 2024-04-03 15:28:19 +02:00
marvell crypto: octeontx2 - Fix cptvf driver cleanup 2024-02-05 20:14:16 +00:00
nx crypto: nx - fix build warnings when DEBUG_FS is not enabled 2023-05-24 18:12:33 +08:00
qce
rockchip crypto: rk3288 - Fix use after free in unprepare 2024-04-03 15:28:40 +02:00
starfive crypto: starfive - Fix dev_err_probe return error 2024-02-05 20:14:16 +00:00
stm32 crypto: stm32/crc32 - fix parsing list of devices 2024-02-05 20:14:16 +00:00
virtio crypto: virtio/akcipher - Fix stack overflow on memcpy 2024-03-01 13:35:01 +01:00
vmx
xilinx crypto: xilinx - call finalize with bh disabled 2024-03-26 18:19:46 -04:00
Kconfig s390/zcrypt: remove CEX2 and CEX3 device drivers 2023-07-24 12:12:22 +02:00
Makefile crypto: starfive - Add crypto engine support 2023-05-19 16:46:22 +08:00
atmel-aes-regs.h
atmel-aes.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
atmel-authenc.h
atmel-ecc.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
atmel-i2c.c
atmel-i2c.h
atmel-sha-regs.h
atmel-sha.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
atmel-sha204a.c crypto: atmel - Switch i2c drivers back to use .probe() 2023-06-02 18:21:32 +08:00
atmel-tdes-regs.h
atmel-tdes.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
exynos-rng.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
geode-aes.c
geode-aes.h
hifn_795x.c crypto: drivers - remove unnecessary (void*) conversions 2023-03-24 18:22:28 +08:00
img-hash.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
mxs-dcp.c crypto: mxs-dcp - Use the devm_clk_get_optional_enabled() helper 2023-03-31 17:50:09 +08:00
n2_asm.S
n2_core.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
n2_core.h
omap-aes-gcm.c crypto: omap - Use new crypto_engine_op interface 2023-08-18 17:01:11 +08:00
omap-aes.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
omap-aes.h crypto: omap - Use new crypto_engine_op interface 2023-08-18 17:01:11 +08:00
omap-crypto.c
omap-crypto.h
omap-des.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
omap-sham.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
padlock-aes.c
padlock-sha.c
qcom-rng.c crypto: qcom-rng: Make the core clock optional regardless of ACPI presence 2023-08-18 17:01:09 +08:00
s5p-sss.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
sa2ul.c crypto: sa2ul - Return crypto_aead_setkey to transfer the error 2024-01-25 15:35:16 -08:00
sa2ul.h crypto: sa2ul - change unsafe data size limit to 255 bytes 2023-05-19 16:45:43 +08:00
sahara.c crypto: sahara - do not resize req->src when doing hash operations 2024-01-25 15:35:18 -08:00
talitos.c crypto: drivers - Explicitly include correct DT includes 2023-08-23 11:04:23 +08:00
talitos.h