CVE-2023-53578
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
04/10/2025
Last modified:
06/10/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net: qrtr: Fix an uninit variable access bug in qrtr_tx_resume()<br />
<br />
Syzbot reported a bug as following:<br />
<br />
=====================================================<br />
BUG: KMSAN: uninit-value in qrtr_tx_resume+0x185/0x1f0 net/qrtr/af_qrtr.c:230<br />
qrtr_tx_resume+0x185/0x1f0 net/qrtr/af_qrtr.c:230<br />
qrtr_endpoint_post+0xf85/0x11b0 net/qrtr/af_qrtr.c:519<br />
qrtr_tun_write_iter+0x270/0x400 net/qrtr/tun.c:108<br />
call_write_iter include/linux/fs.h:2189 [inline]<br />
aio_write+0x63a/0x950 fs/aio.c:1600<br />
io_submit_one+0x1d1c/0x3bf0 fs/aio.c:2019<br />
__do_sys_io_submit fs/aio.c:2078 [inline]<br />
__se_sys_io_submit+0x293/0x770 fs/aio.c:2048<br />
__x64_sys_io_submit+0x92/0xd0 fs/aio.c:2048<br />
do_syscall_x64 arch/x86/entry/common.c:50 [inline]<br />
do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80<br />
entry_SYSCALL_64_after_hwframe+0x63/0xcd<br />
<br />
Uninit was created at:<br />
slab_post_alloc_hook mm/slab.h:766 [inline]<br />
slab_alloc_node mm/slub.c:3452 [inline]<br />
__kmem_cache_alloc_node+0x71f/0xce0 mm/slub.c:3491<br />
__do_kmalloc_node mm/slab_common.c:967 [inline]<br />
__kmalloc_node_track_caller+0x114/0x3b0 mm/slab_common.c:988<br />
kmalloc_reserve net/core/skbuff.c:492 [inline]<br />
__alloc_skb+0x3af/0x8f0 net/core/skbuff.c:565<br />
__netdev_alloc_skb+0x120/0x7d0 net/core/skbuff.c:630<br />
qrtr_endpoint_post+0xbd/0x11b0 net/qrtr/af_qrtr.c:446<br />
qrtr_tun_write_iter+0x270/0x400 net/qrtr/tun.c:108<br />
call_write_iter include/linux/fs.h:2189 [inline]<br />
aio_write+0x63a/0x950 fs/aio.c:1600<br />
io_submit_one+0x1d1c/0x3bf0 fs/aio.c:2019<br />
__do_sys_io_submit fs/aio.c:2078 [inline]<br />
__se_sys_io_submit+0x293/0x770 fs/aio.c:2048<br />
__x64_sys_io_submit+0x92/0xd0 fs/aio.c:2048<br />
do_syscall_x64 arch/x86/entry/common.c:50 [inline]<br />
do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80<br />
entry_SYSCALL_64_after_hwframe+0x63/0xcd<br />
<br />
It is because that skb->len requires at least sizeof(struct qrtr_ctrl_pkt)<br />
in qrtr_tx_resume(). And skb->len equals to size in qrtr_endpoint_post().<br />
But size is less than sizeof(struct qrtr_ctrl_pkt) when qrtr_cb->type<br />
equals to QRTR_TYPE_RESUME_TX in qrtr_endpoint_post() under the syzbot<br />
scenario. This triggers the uninit variable access bug.<br />
<br />
Add size check when qrtr_cb->type equals to QRTR_TYPE_RESUME_TX in<br />
qrtr_endpoint_post() to fix the bug.
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/3814d211ff13ee35f2d9437439a6c7df58524137
- https://git.kernel.org/stable/c/6417070918de3bcdbe0646e7256dae58fd8083ba
- https://git.kernel.org/stable/c/8c9ce34a6ff2c544f96ce0b088e8fd3c1b9698c4
- https://git.kernel.org/stable/c/bef57c227b52c2bde00fad33556175d36d12cfa0
- https://git.kernel.org/stable/c/c6a796ee5a639ffb83c6e5469408cc2ec16cac6a



