Linux: virtio-fs: avoid double-free on failed queue setup
What fixes it
- 3fbc5ee776fefbc6ea34d2518f1f5f90aa2e1dadLinuxCVE List
- 20ef4739b329bb09cff11dd2458795a50674658eLinuxCVE List
- 6af3330ec5d5fb8c06c04eb520a71cf73ea5a765LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
virtio-fs: avoid double-free on failed queue setup
virtio_fs_setup_vqs() allocates fs->vqs and fs->mq_map before calling virtio_find_vqs(). If virtio_find_vqs() fails, the error path frees both pointers and returns an error to virtio_fs_probe().
virtio_fs_probe() then drops the last kobject reference, and virtio_fs_ktype_release() frees fs->vqs and fs->mq_map again. This leaves dangling pointers in struct virtio_fs and can trigger a double-free during probe failure cleanup.
Set fs->vqs and fs->mq_map to NULL immediately after kfree() in the virtio_fs_setup_vqs() error path so that the later kobject release sees an uninitialized state and kfree(NULL) becomes harmless.
This can be reproduced when a broken virtio-fs device advertises more request queues than the transport actually provides. In that case virtio_find_vqs() fails while setting up the extra queue, and the probe path reaches the double-free cleanup sequence.
Text from CVE List
Affected versions 8
- Linuxaffected: a8f62f50b4e4ea92a938fca2ec1bd108d7f210e9 before 3fbc5ee776fefbc6ea34d2518f1f5f90aa2e1dadCVE List
- Linuxaffected: a8f62f50b4e4ea92a938fca2ec1bd108d7f210e9 before 20ef4739b329bb09cff11dd2458795a50674658eCVE List
- Linuxaffected: a8f62f50b4e4ea92a938fca2ec1bd108d7f210e9 before 6af3330ec5d5fb8c06c04eb520a71cf73ea5a765CVE List
- Linuxaffected: 6.9CVE List
- Linuxunaffected: all versions before 6.9CVE List
- Linuxunaffected: 6.12.111 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2CVE List