CVE-2026-90276
Full vulnerability record from the local CVENow database.
Description
In the Linux kernel, the following vulnerability has been resolved: md/md-llbitmap: stop daemon timer rearm on destroy llbitmap_destroy() deletes pending_timer before flushing md_llbitmap_io_wq. However, daemon_work can still be queued or running after the timer has been deleted, and the daemon path can arm pending_timer again when it finds dirty chunks that are not ready to flush yet. If that happens during teardown, pending_timer can remain armed after llbitmap is freed and later dereference freed memory. Add a BITMAP_SHUTDOWN bit to llbitmap->flags, set it before deleting the timer, and make the timer and daemon paths stop queueing or rearming work once teardown starts. Cancel daemon_work before flushing the shared workqueue so no already queued daemon instance can race with the free. Use timer_shutdown_sync() so a daemon instance that passed the shutdown check before teardown cannot rearm the timer afterward. BITMAP_SHUTDOWN is a runtime-only state. Mask it out when reading and updating the llbitmap superblock so the shutdown state is never loaded from disk or persisted to disk.
View original CVE JSON
{
"id": "CVE-2026-90276",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"published": "2026-09-17T17:17:24.247",
"lastModified": "2026-10-19T09:19:21.170",
"vulnStatus": "Received",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmd/md-llbitmap: stop daemon timer rearm on destroy\n\nllbitmap_destroy() deletes pending_timer before flushing\nmd_llbitmap_io_wq. However, daemon_work can still be queued or running\nafter the timer has been deleted, and the daemon path can arm\npending_timer again when it finds dirty chunks that are not ready to\nflush yet.\n\nIf that happens during teardown, pending_timer can remain armed after\nllbitmap is freed and later dereference freed memory.\n\nAdd a BITMAP_SHUTDOWN bit to llbitmap->flags, set it before deleting\nthe timer, and make the timer and daemon paths stop queueing or rearming\nwork once teardown starts. Cancel daemon_work before flushing the shared\nworkqueue so no already queued daemon instance can race with the free.\nUse timer_shutdown_sync() so a daemon instance that passed the shutdown\ncheck before teardown cannot rearm the timer afterward.\n\nBITMAP_SHUTDOWN is a runtime-only state. Mask it out when reading and\nupdating the llbitmap superblock so the shutdown state is never loaded\nfrom disk or persisted to disk."
}
],
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"vendor": "Linux",
"product": "Linux",
"defaultStatus": "unaffected",
"programFiles": [
"drivers/md/md-bitmap.h",
"drivers/md/md-llbitmap.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"versions": [
{
"version": "5ab829f1971dc99f2aac10846c378e67fc875abc",
"lessThan": "c55aa6c17f019b6296952d336939891efa084c06",
"versionType": "git",
"status": "affected"
},
{
"version": "5ab829f1971dc99f2aac10846c378e67fc875abc",
"lessThan": "bb7f92d58fca9a9f06f3f51a82481c5f0bbbd46c",
"versionType": "git",
"status": "affected"
},
{
"version": "5ab829f1971dc99f2aac10846c378e67fc875abc",
"lessThan": "5553d64e01d9a995be6c3de38501c6dd4ceede3b",
"versionType": "git",
"status": "affected"
}
]
},
{
"vendor": "Linux",
"product": "Linux",
"defaultStatus": "affected",
"programFiles": [
"drivers/md/md-bitmap.h",
"drivers/md/md-llbitmap.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"versions": [
{
"version": "6.18",
"status": "affected"
},
{
"version": "0",
"lessThan": "6.18",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.18.52",
"lessThanOrEqual": "6.18.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "7.2.6",
"lessThanOrEqual": "7.2.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "7.3",
"lessThanOrEqual": "*",
"versionType": "original_commit_for_fix",
"status": "unaffected"
}
]
}
]
}
],
"metrics": {},
"references": [
{
"url": "https://git.kernel.org/stable/c/5553d64e01d9a995be6c3de38501c6dd4ceede3b",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/bb7f92d58fca9a9f06f3f51a82481c5f0bbbd46c",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/c55aa6c17f019b6296952d336939891efa084c06",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
]
}