CVE-2026-90003 in Linuxinfo

Zusammenfassung

von VulDB • 16.09.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

futex: Verhindern von Use-After-Free bei rcuwait während des Requeue-Vorgangs mit PI (Priority Inheritance)

Unter PREEMPT_RT kann FUTEX_CMP_REQUEUE_PI einen KASAN-Bericht (slab-out-of-bounds) im Aufruf von futex_requeue_pi_complete() in rcuwait_wake_up() auslösen.

Das von futex_wait_requeue_pi() verwendete futex_q wird auf dem Stack des Warters alloziert. Ein vorzeitiges Aufwachen kann zu einer Race Condition mit einem PI-Requeue wie folgt führen:

waiter requeue task ------ ------------ futex_wait_requeue_pi() futex_do_wait() schedule() futex_requeue futex_proxy_trylock_atomic() futex_requeue_pi_prepare() Q_REQUEUE_PI_NONE -> Q_REQUEUE_PI_IN_PROGRESS * timeout/ signal wakes waiter * futex_requeue_pi_wakeup_sync() Q_REQUEUE_PI_IN_PROGRESS -> Q_REQUEUE_PI_WAIT requeue_pi_wake_futex futex_requeue_pi_complete() cmpxchg Q_REQUEUE_PI_WAIT -> Q_REQUEUE_PI_LOCKED rcuwait_wait_event() if (atomic_read(&q->requeue_state) != Q_REQUEUE_PI_WAIT) break /* no schedule() */

/* q.pi_state->owner == current */ futex_private_hash_put() /* return from syscall */ rcuwait_wake_up(&q->requeue_wait) /* q is gone */

futex_requeue_pi_complete() veröffentlicht Q_REQUEUE_PI_LOCKED, bevor es rcuwait_wake_up() aufruft. Der Wartende beobachtet diesen Zustand in rcuwait_wait_event(), bevor er schedule() in rcuwait_wait_event() aufruft. In diesem Fall kann der Wartende den Systemaufruf verlassen, bevor die Requeue-Aufgabe das Aufwachen abschließen kann.

Um diese Race Condition zu beheben, wird rcuwait_wake_up() im Q_REQUEUE_PI_LOCKED-Fall übersprungen. Dieser Zustand wird nur von requeue_pi_wake_futex() veröffentlicht, welches q->task vor futex_requeue_pi_complete() speichert und den Wartenden über wake_up_state() aufweckt.

Dieses Aufwachen dient dazu, den Wartenden aus seinem Schlaf in futex_do_wait() zu wecken. Wenn sich der Wartende noch dort im Schlafzustand befindet, kann er nicht in den Q_REQUEUE_PI_WAIT-Zustand gelangen (und benötigt dieses entfernte Wake nicht). Sollte der Wartende auf andere Weise (wie in diesem Beispiel) aus futex_do_wait() geweckt werden und stattdessen in futex_requeue_pi_wakeup_sync() schlafen, wird er ebenfalls durch wake_up_state() von requeue_pi_wake_futex() geweckt. Sollte die Wartenden-Aufgabe vor dem Aufruf von wake_up_state() terminieren, wird der Aufgabenzeiger nicht ungültig, da futex_hash_bucket::lock gehalten ist und der Aufgabenzeiger RCU-geschützt (RCU protected) ist.

[bigeasy: Kommentar und Commit-Nachricht aktualisiert]

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Zuständig

Linux

Reservieren

11.09.2026

Veröffentlichung

16.09.2026

Moderieren

akzeptiert

Eintrag

VDB-405800

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!