CVE-2023-52562
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
02/03/2024
Last modified:
16/01/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
mm/slab_common: fix slab_caches list corruption after kmem_cache_destroy()<br />
<br />
After the commit in Fixes:, if a module that created a slab cache does not<br />
release all of its allocated objects before destroying the cache (at rmmod<br />
time), we might end up releasing the kmem_cache object without removing it<br />
from the slab_caches list thus corrupting the list as kmem_cache_destroy()<br />
ignores the return value from shutdown_cache(), which in turn never removes<br />
the kmem_cache object from slabs_list in case __kmem_cache_shutdown() fails<br />
to release all of the cache&#39;s slabs.<br />
<br />
This is easily observable on a kernel built with CONFIG_DEBUG_LIST=y<br />
as after that ill release the system will immediately trip on list_add,<br />
or list_del, assertions similar to the one shown below as soon as another<br />
kmem_cache gets created, or destroyed:<br />
<br />
[ 1041.213632] list_del corruption. next->prev should be ffff89f596fb5768, but was 52f1e5016aeee75d. (next=ffff89f595a1b268)<br />
[ 1041.219165] ------------[ cut here ]------------<br />
[ 1041.221517] kernel BUG at lib/list_debug.c:62!<br />
[ 1041.223452] invalid opcode: 0000 [#1] PREEMPT SMP PTI<br />
[ 1041.225408] CPU: 2 PID: 1852 Comm: rmmod Kdump: loaded Tainted: G B W OE 6.5.0 #15<br />
[ 1041.228244] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20230524-3.fc37 05/24/2023<br />
[ 1041.231212] RIP: 0010:__list_del_entry_valid+0xae/0xb0<br />
<br />
Another quick way to trigger this issue, in a kernel with CONFIG_SLUB=y,<br />
is to set slub_debug to poison the released objects and then just run<br />
cat /proc/slabinfo after removing the module that leaks slab objects,<br />
in which case the kernel will panic:<br />
<br />
[ 50.954843] general protection fault, probably for non-canonical address 0xa56b6b6b6b6b6b8b: 0000 [#1] PREEMPT SMP PTI<br />
[ 50.961545] CPU: 2 PID: 1495 Comm: cat Kdump: loaded Tainted: G B W OE 6.5.0 #15<br />
[ 50.966808] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20230524-3.fc37 05/24/2023<br />
[ 50.972663] RIP: 0010:get_slabinfo+0x42/0xf0<br />
<br />
This patch fixes this issue by properly checking shutdown_cache()&#39;s<br />
return value before taking the kmem_cache_release() branch.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.0 (including) | 6.1.56 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.5.6 (excluding) |
| 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:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/46a9ea6681907a3be6b6b0d43776dccc62cad6cf
- https://git.kernel.org/stable/c/51988be187b041e5355245957b0b9751fa382e0d
- https://git.kernel.org/stable/c/a5569bb187521432f509b69dda7d29f78b2d38b0
- https://git.kernel.org/stable/c/46a9ea6681907a3be6b6b0d43776dccc62cad6cf
- https://git.kernel.org/stable/c/51988be187b041e5355245957b0b9751fa382e0d
- https://git.kernel.org/stable/c/a5569bb187521432f509b69dda7d29f78b2d38b0



