CVE-2026-23047: libceph: make calc_target() set t->paused, not just clear it

Published Feb 4, 2026
·
Updated

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

libceph: make calctarget() set t->paused, not just clear it

Currently calctarget() clears t->paused if the request shouldn't be paused anymore, but doesn't ever set t->paused even though it's able to determine when the request should be paused. Setting t->paused is left to submitrequest() which is fine for regular requests but doesn't work for linger requests -- since submitrequest() doesn't operate on linger requests, there is nowhere for lreq->t.paused to be set. One consequence of this is that watches don't get reestablished on paused -> unpaused transitions in cases where requests have been paused long enough for the (paused) unwatch request to time out and for the subsequent (re)watch request to enter the paused state. On top of the watch not getting reestablished, rbdreregisterwatch() gets stuck with rbddev->watchmutex held:

rbdregisterwatch rbdregisterwatch cephosdcwatch lingerregcommitwait

It's waiting for lreq->regcommitwait to be completed, but for that to happen the respective request needs to end up on needresendlinger list and be kicked when requests are unpaused. There is no chance for that if the request in question is never marked paused in the first place.

The fact that rbddev->watchmutex remains taken out forever then prevents the image from getting unmapped -- "rbd unmap" would inevitably hang in D state on an attempt to grab the mutex.

Affected Software

2 affected componentsFixes available
Linux Linux kernel
debian/linux
6.1.176-16.1.190-16.12.107-16.12.115-27.2.12-17.2.15-1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade debian/linux to a version that resolves this vulnerability.

    Fixed in 6.1.176-1Fixed in 6.1.190-1Fixed in 6.12.107-1Fixed in 6.12.113-1Fixed in 7.2.12-1Fixed in 7.2.13-1

Event History

Feb 4, 2026
CVE Published
via MITRE·04:00 PM
Data Sourced
via MITRE·04:00 PM
Description
Data Sourced
via NVD·04:16 PM
Description

Parent advisories

This vulnerability appears in the following advisories.

Peer vulnerabilities

Found alongside the following vulnerabilities.

Frequently Asked Questions

1

Which workloads are most likely to encounter this issue?

Linux kernel Ceph clients using linger requests, including RBD watch registration paths, are implicated. The described failure involves requests that remain paused long enough for an unwatch request to time out and a subsequent rewatch request to enter a paused state.

2

What operational symptoms indicate the issue may be occurring?

A Ceph watch may fail to be reestablished after requests transition from paused to unpaused. RBD watch re-registration can also become stuck while holding the device watch mutex, waiting for the linger request registration commit to complete.

3

What condition prevents recovery of the stalled watch registration?

The linger request's paused state is not set, so the request does not reach the need_resend_linger list when requests are unpaused. As a result, it is not kicked for resend and its registration completion wait does not finish.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203