CVE-2025-68807
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
13/01/2026
Last modified:
13/01/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
block: fix race between wbt_enable_default and IO submission<br />
<br />
When wbt_enable_default() is moved out of queue freezing in elevator_change(),<br />
it can cause the wbt inflight counter to become negative (-1), leading to hung<br />
tasks in the writeback path. Tasks get stuck in wbt_wait() because the counter<br />
is in an inconsistent state.<br />
<br />
The issue occurs because wbt_enable_default() could race with IO submission,<br />
allowing the counter to be decremented before proper initialization. This manifests<br />
as:<br />
<br />
rq_wait[0]:<br />
inflight: -1<br />
has_waiters: True<br />
<br />
rwb_enabled() checks the state, which can be updated exactly between wbt_wait()<br />
(rq_qos_throttle()) and wbt_track()(rq_qos_track()), then the inflight counter<br />
will become negative.<br />
<br />
And results in hung task warnings like:<br />
task:kworker/u24:39 state:D stack:0 pid:14767<br />
Call Trace:<br />
rq_qos_wait+0xb4/0x150<br />
wbt_wait+0xa9/0x100<br />
__rq_qos_throttle+0x24/0x40<br />
blk_mq_submit_bio+0x672/0x7b0<br />
...<br />
<br />
Fix this by:<br />
<br />
1. Splitting wbt_enable_default() into:<br />
- __wbt_enable_default(): Returns true if wbt_init() should be called<br />
- wbt_enable_default(): Wrapper for existing callers (no init)<br />
- wbt_init_enable_default(): New function that checks and inits WBT<br />
<br />
2. Using wbt_init_enable_default() in blk_register_queue() to ensure<br />
proper initialization during queue registration<br />
<br />
3. Move wbt_init() out of wbt_enable_default() which is only for enabling<br />
disabled wbt from bfq and iocost, and wbt_init() isn&#39;t needed. Then the<br />
original lock warning can be avoided.<br />
<br />
4. Removing the ELEVATOR_FLAG_ENABLE_WBT_ON_EXIT flag and its handling<br />
code since it&#39;s no longer needed<br />
<br />
This ensures WBT is properly initialized before any IO can be submitted,<br />
preventing the counter from going negative.



