CVE-2026-98079: btrfs: zstd: fix lost wakeup when waiting for a workspace
btrfs: zstd: fix lost wakeup when waiting for a workspace
Affected Software
Event History
Frequently Asked Questions
What conditions are required for the stall to occur?
A writer must be waiting in zstd_get_workspace() after zstd_alloc_workspace() fails. A workspace must then be returned during the interval before the waiting task has made itself visible, causing the wakeup to be missed.
What is the operational impact of a missed wakeup?
The affected writer can remain in TASK_UNINTERRUPTIBLE indefinitely, despite a workspace being available. It may resume only if another task later returns a workspace and generates another wakeup.
How can this condition be recognized on an affected system?
A writer may be stuck in zstd_get_workspace() in an uninterruptible sleep while a Zstandard workspace is free. The issue is specifically associated with a failed workspace allocation and a lost wakeup from zstd_put_workspace().
Why is the timing window significant?
The allocation path uses kvmalloc() and can enter reclaim, making the interval between allocation failure and waiter setup relatively wide. The fallback maximum-level workspace is deliberately retained and is the workspace that waiters depend on for the wakeup.