CVE-2023-52562

In the Linux kernel, the following vulnerability has been resolved: mm/slab_common: fix slab_caches list corruption after kmem_cache_destroy() After the commit in Fixes:, if a module that created a slab cache does not release all of its allocated objects before destroying the cache (at rmmod time), we might end up releasing the kmem_cache object without removing it from the slab_caches list thus corrupting the list as kmem_cache_destroy() ignores the return value from shutdown_cache(), which in turn never removes the kmem_cache object from slabs_list in case __kmem_cache_shutdown() fails to release all of the cache's slabs. This is easily observable on a kernel built with CONFIG_DEBUG_LIST=y as after that ill release the system will immediately trip on list_add, or list_del, assertions similar to the one shown below as soon as another kmem_cache gets created, or destroyed: [ 1041.213632] list_del corruption. next->prev should be ffff89f596fb5768, but was 52f1e5016aeee75d. (next=ffff89f595a1b268) [ 1041.219165] ------------[ cut here ]------------ [ 1041.221517] kernel BUG at lib/list_debug.c:62! [ 1041.223452] invalid opcode: 0000 [#1] PREEMPT SMP PTI [ 1041.225408] CPU: 2 PID: 1852 Comm: rmmod Kdump: loaded Tainted: G B W OE 6.5.0 #15 [ 1041.228244] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20230524-3.fc37 05/24/2023 [ 1041.231212] RIP: 0010:__list_del_entry_valid+0xae/0xb0 Another quick way to trigger this issue, in a kernel with CONFIG_SLUB=y, is to set slub_debug to poison the released objects and then just run cat /proc/slabinfo after removing the module that leaks slab objects, in which case the kernel will panic: [ 50.954843] general protection fault, probably for non-canonical address 0xa56b6b6b6b6b6b8b: 0000 [#1] PREEMPT SMP PTI [ 50.961545] CPU: 2 PID: 1495 Comm: cat Kdump: loaded Tainted: G B W OE 6.5.0 #15 [ 50.966808] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20230524-3.fc37 05/24/2023 [ 50.972663] RIP: 0010:get_slabinfo+0x42/0xf0 This patch fixes this issue by properly checking shutdown_cache()'s return value before taking the kmem_cache_release() branch.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc3:*:*:*:*:*:*

History

16 Jan 2025, 17:02

Type Values Removed Values Added
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 5.5
CWE NVD-CWE-noinfo
References () https://git.kernel.org/stable/c/46a9ea6681907a3be6b6b0d43776dccc62cad6cf - () https://git.kernel.org/stable/c/46a9ea6681907a3be6b6b0d43776dccc62cad6cf - Patch
References () https://git.kernel.org/stable/c/51988be187b041e5355245957b0b9751fa382e0d - () https://git.kernel.org/stable/c/51988be187b041e5355245957b0b9751fa382e0d - Patch
References () https://git.kernel.org/stable/c/a5569bb187521432f509b69dda7d29f78b2d38b0 - () https://git.kernel.org/stable/c/a5569bb187521432f509b69dda7d29f78b2d38b0 - Patch
CPE cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.6:rc3:*:*:*:*:*:*
First Time Linux
Linux linux Kernel

21 Nov 2024, 08:40

Type Values Removed Values Added
References () https://git.kernel.org/stable/c/46a9ea6681907a3be6b6b0d43776dccc62cad6cf - () https://git.kernel.org/stable/c/46a9ea6681907a3be6b6b0d43776dccc62cad6cf -
References () https://git.kernel.org/stable/c/51988be187b041e5355245957b0b9751fa382e0d - () https://git.kernel.org/stable/c/51988be187b041e5355245957b0b9751fa382e0d -
References () https://git.kernel.org/stable/c/a5569bb187521432f509b69dda7d29f78b2d38b0 - () https://git.kernel.org/stable/c/a5569bb187521432f509b69dda7d29f78b2d38b0 -
Summary
  • (es) En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: mm/slab_common: corrige la corrupción de la lista slab_caches después de kmem_cache_destroy() Después de el commit en Correcciones:, si un módulo que creó un caché de losa no libera todos sus objetos asignados antes de destruir el cache (en el momento rmmod), podríamos terminar liberando el objeto kmem_cache sin eliminarlo de la lista slab_caches, corrompiendo así la lista ya que kmem_cache_destroy() ignora el valor de retorno de Shutdown_cache(), que a su vez nunca elimina el objeto kmem_cache de slabs_list en caso __kmem_cache_shutdown() no puede liberar todas las losas del caché. Esto es fácilmente observable en un kernel construido con CONFIG_DEBUG_LIST=y ya que después de ese lanzamiento, el sistema activará inmediatamente las aserciones list_add o list_del, similares a la que se muestra a continuación tan pronto como se cree o destruya otro kmem_cache: [ 1041.213632] list_del corrupción. siguiente->anterior debería ser ffff89f596fb5768, pero era 52f1e5016aeee75d. (siguiente=ffff89f595a1b268) [1041.219165] ------------[ cortar aquí ]------------ [ 1041.221517] ¡ERROR del kernel en lib/list_debug.c:62! [ 1041.223452] código de operación no válido: 0000 [#1] PREEMPT SMP PTI [ 1041.225408] CPU: 2 PID: 1852 Comm: rmmod Kdump: cargado Contaminado: GBW OE 6.5.0 #15 [ 1041.228244] Nombre de hardware: PC estándar QEMU (Q35 + ICH9, 2009), BIOS edk2-20230524-3.fc37 24/05/2023 [ 1041.231212] RIP: 0010:__list_del_entry_valid+0xae/0xb0 Otra forma rápida de desencadenar este problema, en un kernel con CONFIG_SLUB=y, es configurar slub_debug para envenenar los objetos liberados y luego simplemente ejecutar cat /proc/slabinfo después de eliminar el módulo que filtra los objetos slab, en cuyo caso el kernel entrará en pánico: [50.954843] falla de protección general, probablemente para la dirección no canónica 0xa56b6b6b6b6b6b8b: 0000 [#1 ] PREEMPT SMP PTI [ 50.961545] CPU: 2 PID: 1495 Comm: cat Kdump: cargado Contaminado: GBW OE 6.5.0 #15 [ 50.966808] Nombre de hardware: PC estándar QEMU (Q35 + ICH9, 2009), BIOS edk2-20230524- 3.fc37 24/05/2023 [ 50.972663] RIP: 0010:get_slabinfo+0x42/0xf0 Este parche soluciona este problema verificando correctamente el valor de retorno de Shutdown_cache() antes de tomar la rama kmem_cache_release().

02 Mar 2024, 22:15

Type Values Removed Values Added
New CVE

Information

Published : 2024-03-02 22:15

Updated : 2025-01-16 17:02


NVD link : CVE-2023-52562

Mitre link : CVE-2023-52562

CVE.ORG link : CVE-2023-52562


JSON object : View

Products Affected

linux

  • linux_kernel