CVE-2026-64112CWE-362CWE-367

CVE-2026-64112

High · published July 19, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
0.8
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

rbd: eliminate a race in lock_dwork draining on unmap

Given how rbd_lock_add_request() and rbd_img_exclusive_lock() are

written, lock_dwork may be (re)queued more than it's actually needed:

for example in case a new I/O request comes in while we are in the

middle of rbd_acquire_lock() on behalf of another I/O request. This is

expected and with rbd_release_lock() preemptively canceling lock_dwork

is benign under normal operation.

A more problematic example is maybe_kick_acquire():

if (have_requests || delayed_work_pending(&rbd_dev->lock_dwork)) {

dout("%s rbd_dev %p kicking lock_dwork\n", __func__, rbd_dev);

mod_delayed_work(rbd_dev->task_wq, &rbd_dev->lock_dwork, 0);

}

It's not unrealistic for lock_dwork to get canceled right after

delayed_work_pending() returns true and for mod_delayed_work() to

requeue it right there anyway. This is a classic TOCTOU race.

When it comes to unmapping the image, there is an implicit assumption

of no self-initiated exclusive lock activity past the point of return

from rbd_dev_image_unlock() which unlocks the lock if it happens to be

held. This unlock is assumed to be final and lock_dwork (as well as

all other exclusive lock tasks, really) isn't expected to get queued

again. However, lock_dwork is canceled only in cancel_tasks_sync()

(i.e. later in the unmap sequence) and on top of that the cancellation

can get in effect nullified by maybe_kick_acquire(). This may result

in rbd_acquire_lock() executing after rbd_dev_device_release() and

rbd_dev_image_release() run and free and/or reset a bunch of things.

One of the possible failure modes then is a violated

rbd_assert(rbd_image_format_valid(rbd_dev->image_format));

in rbd_dev_header_info() which is called via rbd_dev_refresh() from

rbd_post_acquire_action().

Redo exclusive lock task draining to provide saner semantics and try

to meet the assumptions around rbd_dev_image_unlock().

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00099 · 0.8th percentile
Weaknesses
CWE-362 · Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition'); CWE-367 · Time-of-check Time-of-use (TOCTOU) Race Condition
Published
2026-07-19T20:17Z
Affected products (7)
ProductVersionsFixed in
linux/linux_kernel≥ 4.12, < 6.12.926.12.92
linux/linux_kernel≥ 6.13, < 6.18.346.18.34
linux/linux_kernel≥ 6.19, < 7.0.117.0.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (4)
EPSS history
Timeline
  • 19 JUL 15:40Z
    rbd: eliminate a race in lock_dwork draining on unmap
    cvelistv5