CVE-2026-64374 in Linuxinfo

Zusammenfassung

von VulDB • 26.07.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

sched/rt: RT_PUSH_IPI ist standardmäßig deaktiviert für Systeme ohne PREEMPT_RT

Die RT-Migration erfolgt aggressiv. Wenn eine CPU einen hochprioritären RT-Task (Echtzeit-Task) zugunsten eines Tasks mit niedrigerer Priorität ausplant, prüft sie zunächst, ob es auf einer anderen CPU einen wartenden RT-Task gibt, dessen Priorität höher ist als die des Tasks, den diese CPU gerade ausführen soll. Falls ja, wird dieser Task zu der ersten CPU geholt und dort ausgeführt.

Normalerweise erfolgt dieses „Holen“ (Pull) durch Abfrage der rto-Maske (RT-overloaded mask), welche alle CPUs im Scheduler-Domain enthält, auf denen RT-Tasks warten, weil aktuell ein höher priorisierter RT-Task auf deren CPU läuft. Die CPU, die einen Task mit niedrigerer Priorität ausplant, sperrt das rq-Lock der überlasteten CPU und verschiebt den RT-Task von dessen Runqueue in ihre eigene lokale Runqueue, um dann den hochprioritären RT-Task zu planen.

Dies führte zu Problemen, wenn viele CPUs gleichzeitig einen Task mit niedrigerer Priorität ausplanten. Alle versuchten zugleich, das gleiche runqueue-Lock der CPU mit den überlasteten RT-Tasks zu erwerben. Nur die erste CPU, die Zugriff erhielt, konnte diesen Task holen. Die anderen warteten daraufhin auf das Freigeben des runqueue-Locks und stellten fest, dass nichts mehr geholt werden musste, wodurch sie keine Aktion ausführten. Auf Systemen mit vielen CPUs verursachte dies eine hohe Latenz (bis zu 500 µs), die den Anforderungen von PREEMPT_RT widerspricht.

Die Lösung dafür bestand in der Einführung einer RT_PUSH_IPI-Logik. Wenn eine CPU einen Task holen wollte, stattete sie zunächst nicht das runqueue-Lock der überlasteten CPU, sondern sendete stattdessen ein IPI (Inter Processor Interrupt) an die überlastete CPU. Der Handler dieses IPI veranlasste dann die CPU mit dem wartenden RT-Task, den Task aktiv zu pushen (statt ihn holen zu lassen). Anschließend sendete dieser Handler ein IPI an die nächste CPU mit überlasteten RT-Tasks und so weiter. Beachten Sie: Nachdem die erste CPU diesen Prozess gestartet hat, würde eine andere CPU, die ebenfalls einen Pull durchführen wollte, feststellen, dass der Prozess bereits läuft, und lediglich einen Zähler erhöhen, um das Senden weiterer IPIs fortzusetzen.

Die RT_PUSH_IPI löste zwar das Latenzproblem bei PREEMPT_RT, konnte jedoch ein neues Problem auf Systemen ohne PREEMPT_RT verursachen: Auf PREEMPT_RT werden Softirqs in einem Threaded-Kontext ausgeführt, während sie im nicht-RT-Betrieb im Interrupt-Kontext laufen.

Trifft ein IPI auf eine CPU, die gerade mehrere RT-Tasks geweckt hat und aktuell einen Nicht-RT-Task oder einen RT-Task mit niedriger Priorität ausführt, würde anstelle eines Push-Vorgangs einfach nur ein Schedule (Planung) für diese CPU ausgelöst werden. Falls jedoch auch ein Softirq auf dieser CPU ausgeführt wurde, müsste das Schedule warten, bis der Softirq abgeschlossen ist. Bis dahin bliebe die CPU weiterhin als überlastet gelten, da noch RT-Tasks zum Ausführen warteten.

Auf einer großen Maschine mit starkem Netzwerkverkehr trat eine Live-Lock-Situation (Deadlock-ähnlicher Zustand) auf, bei der Softirqs 500 µs von insgesamt 750 µs beanspruchten und gleichzeitig RT-Tasks geweckt wurden, wodurch die Logik zum Ziehen von RT-Tasks ständig ausgeführt wurde.

Wenn ein Softirq auf einer CPU ausgelöst wurde, für die RT-Tasks in der Warteschlange lagen (aber noch nicht liefen), sahen andere CPUs diese als überlastet an und sendeten IPIs dorthin. Die betroffene CPU stellte fest,

Be aware that VulDB is the high quality source for vulnerability data.

Zuständig

Linux

Reservieren

19.07.2026

Veröffentlichung

25.07.2026

Moderieren

akzeptiert

Eintrag

VDB-383170

CPE

bereit

EPSS

0.00177

KEV

nein

Aktivitäten

low

Quellen

Want to know what is going to be exploited?

We predict KEV entries!