CVE-2026-90081: net/rds: use wq_has_sleeper() in rds_cong_map_updated()

Published Sep 17, 2026
·
Updated

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

net/rds: use wqhassleeper() in rdscongmapupdated()

rdscongmapupdated() runs after a peer's congestion map has been rewritten (by rdstcpcongrecv() and rdsibcongrecv(), or the clear-all in the loopback and IB send-completion paths). It bumps rdsconggeneration and then checks waitqueueactive() on map->mwaitq and on rdspollwaitq to decide whether anyone needs waking. atomicinc() carries no ordering and waitqueueactive() is a plain load, so nothing orders the map and generation stores before the wait queue reads. The waiters do the mirror image: rdscongwait() adds itself to mwaitq and then tests the port bit, and rdspoll() registers on rdspollwaitq and then reads the generation. That is the store-buffering pattern described above waitqueueactive() in include/linux/wait.h - the updater can observe an empty wait queue while the waiter still observes the port as congested, and no wake-up is issued.

rdscongwait() is an interruptible sleep with no timeout, so a sender blocked on a congested port stays blocked until the next congestion update from that peer arrives or a signal is delivered. A poll() waiter misses the map-updated notification the same way.

Use wqhassleeper(), which is waitqueueactive() preceded by the required full barrier, as rdstcpstatechange() already does for the same pattern.

Affected Software

1 affected component
The Linux Kernel Project Linux Kernel

Event History

Sep 17, 2026
CVE Published
via MITRE·04:05 PM
Data Sourced
via MITRE·04:05 PM
Description

Frequently Asked Questions

1

What is the practical impact if the missed wake-up occurs?

A sender waiting on a congested port can remain blocked indefinitely because the wait is interruptible but has no timeout. It will resume only when the peer sends another congestion update or a signal interrupts the wait.

2

Which RDS activity can reach the affected update path?

The path runs after a peer congestion map is rewritten by TCP or InfiniBand congestion receives, and during clear-all handling in the loopback and InfiniBand send-completion paths. Systems using these RDS congestion-map update paths are relevant.

3

Are only blocked senders affected by the missed wake-up?

No. The update checks both the congestion map wait queue used by rds_cong_wait() and the polling wait queue used by rds_poll(). Either type of waiter can miss a wake-up because the queue check is not ordered against the preceding map and generation updates.

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