GHSA-GFG9-4R2G-565G
Vulnerability from github – Published: 2026-09-25 12:31 – Updated: 2026-09-25 12:31In the Linux kernel, the following vulnerability has been resolved:
virtio: fix use-after-free in unregister_virtio_device()
device_unregister() is device_del() plus put_device(). When the caller holds no extra reference, that drops the last one and runs the release callback, which for several transports frees the memory the embedded struct virtio_device sits in. unregister_virtio_device() then calls virtio_debug_device_exit(), which reads dev->debugfs_dir out of the freed object.
Affected transports are the ones whose release callback frees and whose remove path takes no reference: virtio_mmio, virtio_vdpa, virtio_uml, mlxbf-tmfifo and virtio_ccw. virtio_pci is unaffected because virtio_pci_remove() brackets the call with get_device() and put_device().
Remove the debugfs entries before the device can go away. They are only accessed through the protected debugfs interface, so debugfs_remove_recursive() waits for in-progress file operations before returning. Tearing them down while the device is still alive is therefore safe.
Reproduced on User-Mode Linux with CONFIG_KASAN and CONFIG_VIRTIO_DEBUG by unbinding a virtio-uml device:
BUG: KASAN: slab-use-after-free in virtio_debug_device_exit+0x36/0x4d Read of size 8 at addr 00000000616e0b10 by task init/1 __asan_report_load8_noabort virtio_debug_device_exit+0x36/0x4d unregister_virtio_device+0x48/0x75 virtio_uml_remove platform_remove device_release_driver_internal unbind_store
Freed by task 1: kfree virtio_uml_release_dev device_release kobject_put put_device device_unregister
With this applied, the report is gone and unbind is clean.
{
"affected": [],
"aliases": [
"CVE-2026-97996"
],
"database_specific": {
"cwe_ids": [],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-09-25T11:17:27Z",
"severity": null
},
"details": "In the Linux kernel, the following vulnerability has been resolved:\n\nvirtio: fix use-after-free in unregister_virtio_device()\n\ndevice_unregister() is device_del() plus put_device(). When the caller\nholds no extra reference, that drops the last one and runs the release\ncallback, which for several transports frees the memory the embedded\nstruct virtio_device sits in. unregister_virtio_device() then calls\nvirtio_debug_device_exit(), which reads dev-\u003edebugfs_dir out of the freed\nobject.\n\nAffected transports are the ones whose release callback frees and whose\nremove path takes no reference: virtio_mmio, virtio_vdpa, virtio_uml,\nmlxbf-tmfifo and virtio_ccw. virtio_pci is unaffected because\nvirtio_pci_remove() brackets the call with get_device() and put_device().\n\nRemove the debugfs entries before the device can go away. They are only\naccessed through the protected debugfs interface, so\ndebugfs_remove_recursive() waits for in-progress file operations before\nreturning. Tearing them down while the device is still alive is therefore\nsafe.\n\nReproduced on User-Mode Linux with CONFIG_KASAN and CONFIG_VIRTIO_DEBUG\nby unbinding a virtio-uml device:\n\n BUG: KASAN: slab-use-after-free in virtio_debug_device_exit+0x36/0x4d\n Read of size 8 at addr 00000000616e0b10 by task init/1\n __asan_report_load8_noabort\n virtio_debug_device_exit+0x36/0x4d\n unregister_virtio_device+0x48/0x75\n virtio_uml_remove\n platform_remove\n device_release_driver_internal\n unbind_store\n\n Freed by task 1:\n kfree\n virtio_uml_release_dev\n device_release\n kobject_put\n put_device\n device_unregister\n\nWith this applied, the report is gone and unbind is clean.",
"id": "GHSA-gfg9-4r2g-565g",
"modified": "2026-09-25T12:31:32Z",
"published": "2026-09-25T12:31:32Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-97996"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/3f9a0fceb730f5107d52421ead5568eae25a0049"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/77dbd10a701a30fdfea5c3bb7a29163128f9a9c7"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/951cad50cba89e736afdee4a730e0e52f9245c9b"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/caf042153016d651b55d0fb4a63cdf7d0d23dee2"
}
],
"schema_version": "1.4.0",
"severity": []
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.