GHSA-8C3R-C85M-88VQ
Vulnerability from github – Published: 2026-10-06 09:31 – Updated: 2026-10-06 09:31In the Linux kernel, the following vulnerability has been resolved:
xfrm: serialize state GC with device state flush
The deferred-device pass in xfrm_dev_state_flush() finds states under xfrm_state_dev_gc_lock, but drops the lock before calling xfrm_dev_state_free() because the driver callback may sleep. The device GC list does not hold an xfrm_state reference, so the state GC worker can destroy the same state concurrently.
The race can proceed as follows:
CPU 0 CPU 1 find x on the device GC list drop xfrm_state_dev_gc_lock read x->xso.dev xfrm_state_gc_destroy(x) xfrm_dev_state_free(x) xfrm_state_free(x) continue xfrm_dev_state_free(x)
Both paths can invoke the driver callback and drop the device reference. CPU 0 can also access the xfrm_state after CPU 1 has freed it.
KASAN reported:
BUG: KASAN: slab-use-after-free in xfrm_dev_state_free+0x24c/0x2a0 Read of size 8 at addr ffff88810bbaa960 by task poc/102
Call Trace: xfrm_dev_state_free+0x24c/0x2a0 xfrm_dev_state_flush+0x353/0x400 xfrm_dev_event+0x26d/0x3a0 notifier_call_chain+0xc0/0x280 __dev_notify_flags+0x169/0x250 netif_change_flags+0xe7/0x160 dev_change_flags+0x96/0x220 devinet_ioctl+0x7f4/0x1880
Allocated by task 87: xfrm_state_alloc+0x1e/0x5c0 xfrm_add_sa+0xe7f/0x5820 xfrm_user_rcv_msg+0x4f3/0x940
Freed by task 57: kmem_cache_free+0xcb/0x3d0 xfrm_state_gc_task+0x4a8/0x650 process_one_work+0x63a/0x1070
Serialize xfrm_state destruction against the deferred-device pass with a mutex. Keep xfrm_state_dev_gc_lock limited to list operations and retain the existing callback and device-reference release ordering.
{
"affected": [],
"aliases": [
"CVE-2026-98231"
],
"database_specific": {
"cwe_ids": [],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-10-06T09:18:10Z",
"severity": null
},
"details": "In the Linux kernel, the following vulnerability has been resolved:\n\nxfrm: serialize state GC with device state flush\n\nThe deferred-device pass in xfrm_dev_state_flush() finds states under\nxfrm_state_dev_gc_lock, but drops the lock before calling\nxfrm_dev_state_free() because the driver callback may sleep. The device\nGC list does not hold an xfrm_state reference, so the state GC worker can\ndestroy the same state concurrently.\n\nThe race can proceed as follows:\n\n CPU 0 CPU 1\n find x on the device GC list\n drop xfrm_state_dev_gc_lock\n read x-\u003exso.dev\n xfrm_state_gc_destroy(x)\n xfrm_dev_state_free(x)\n xfrm_state_free(x)\n continue xfrm_dev_state_free(x)\n\nBoth paths can invoke the driver callback and drop the device reference.\nCPU 0 can also access the xfrm_state after CPU 1 has freed it.\n\nKASAN reported:\n\n BUG: KASAN: slab-use-after-free in xfrm_dev_state_free+0x24c/0x2a0\n Read of size 8 at addr ffff88810bbaa960 by task poc/102\n\n Call Trace:\n xfrm_dev_state_free+0x24c/0x2a0\n xfrm_dev_state_flush+0x353/0x400\n xfrm_dev_event+0x26d/0x3a0\n notifier_call_chain+0xc0/0x280\n __dev_notify_flags+0x169/0x250\n netif_change_flags+0xe7/0x160\n dev_change_flags+0x96/0x220\n devinet_ioctl+0x7f4/0x1880\n\n Allocated by task 87:\n xfrm_state_alloc+0x1e/0x5c0\n xfrm_add_sa+0xe7f/0x5820\n xfrm_user_rcv_msg+0x4f3/0x940\n\n Freed by task 57:\n kmem_cache_free+0xcb/0x3d0\n xfrm_state_gc_task+0x4a8/0x650\n process_one_work+0x63a/0x1070\n\nSerialize xfrm_state destruction against the deferred-device pass with a\nmutex. Keep xfrm_state_dev_gc_lock limited to list operations and retain\nthe existing callback and device-reference release ordering.",
"id": "GHSA-8c3r-c85m-88vq",
"modified": "2026-10-06T09:31:31Z",
"published": "2026-10-06T09:31:31Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-98231"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/39e41af3653ee45c985190dd97426f318918d201"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/75fc4561772e2f9811abf39ed10443e6f4a4bc6c"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/84e378395494963b1e581cf223a7cbeec8c0e2d6"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/89fefad9f971bc637fb22373078144f2563c4be9"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/937108dc0258d6ac69926b00bc53598c98986ee1"
}
],
"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.