CVE-2022-48925
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
22/08/2024
Last modified:
23/08/2024
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
RDMA/cma: Do not change route.addr.src_addr outside state checks<br />
<br />
If the state is not idle then resolve_prepare_src() should immediately<br />
fail and no change to global state should happen. However, it<br />
unconditionally overwrites the src_addr trying to build a temporary any<br />
address.<br />
<br />
For instance if the state is already RDMA_CM_LISTEN then this will corrupt<br />
the src_addr and would cause the test in cma_cancel_operation():<br />
<br />
if (cma_any_addr(cma_src_addr(id_priv)) && !id_priv->cma_dev)<br />
<br />
Which would manifest as this trace from syzkaller:<br />
<br />
BUG: KASAN: use-after-free in __list_add_valid+0x93/0xa0 lib/list_debug.c:26<br />
Read of size 8 at addr ffff8881546491e0 by task syz-executor.1/32204<br />
<br />
CPU: 1 PID: 32204 Comm: syz-executor.1 Not tainted 5.12.0-rc8-syzkaller #0<br />
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011<br />
Call Trace:<br />
__dump_stack lib/dump_stack.c:79 [inline]<br />
dump_stack+0x141/0x1d7 lib/dump_stack.c:120<br />
print_address_description.constprop.0.cold+0x5b/0x2f8 mm/kasan/report.c:232<br />
__kasan_report mm/kasan/report.c:399 [inline]<br />
kasan_report.cold+0x7c/0xd8 mm/kasan/report.c:416<br />
__list_add_valid+0x93/0xa0 lib/list_debug.c:26<br />
__list_add include/linux/list.h:67 [inline]<br />
list_add_tail include/linux/list.h:100 [inline]<br />
cma_listen_on_all drivers/infiniband/core/cma.c:2557 [inline]<br />
rdma_listen+0x787/0xe00 drivers/infiniband/core/cma.c:3751<br />
ucma_listen+0x16a/0x210 drivers/infiniband/core/ucma.c:1102<br />
ucma_write+0x259/0x350 drivers/infiniband/core/ucma.c:1732<br />
vfs_write+0x28e/0xa30 fs/read_write.c:603<br />
ksys_write+0x1ee/0x250 fs/read_write.c:658<br />
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46<br />
entry_SYSCALL_64_after_hwframe+0x44/0xae<br />
<br />
This is indicating that an rdma_id_private was destroyed without doing<br />
cma_cancel_listens().<br />
<br />
Instead of trying to re-use the src_addr memory to indirectly create an<br />
any address derived from the dst build one explicitly on the stack and<br />
bind to that as any other normal flow would do. rdma_bind_addr() will copy<br />
it over the src_addr once it knows the state is valid.<br />
<br />
This is similar to commit bc0bdc5afaa7 ("RDMA/cma: Do not change<br />
route.addr.src_addr.ss_family")
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.10 (including) | 5.10.103 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.26 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 5.16.12 (excluding) |
To consult the complete list of CPE names with products and versions, see this page



