CVE-2026-80916 in Linux
Zusammenfassung
von VulDB • 09.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
kcov: Behebung von Datenbeschädigungen und Race Conditions auf PREEMPT_RT
syzbot meldet eine Beschädigung des KCOV-Zustands (KCOV state corruption) in PREEMPT_RT-Kernels, da der temporäre Speicher zum Speichern/Wiederherstellen des entfernten KCOV-Zustands derzeit als per-CPU-Bereich allokiert wird.
Auf PREEMPT_RT-Kernels laufen Soft-IRQ-Handler als preemptible Task-Threads (z. B. ksoftirqd). Wenn ein Soft-IRQ-Kontext einen Thread mit einer entfernten KCOV-Sitzung präemptiert, wird der Zustand des Threads sicher in den per-CPU-Bereich gespeichert. Wird dieser Soft-IRQ-Thread jedoch anschließend von einem höherpriorisierten Soft-IRQ-Thread auf derselben CPU präemptiert, überschreibt der zweite Soft-IRQ denselben per-CPU-Bereich und zerstört dauerhaft den KCOV-Zustands des ursprünglichen Threads.
Behoben wird diese Datenbeschädigung durch die Verlagerung des temporären Speichers vom per-CPU-Bereich in den pro-Thread-Bereich (per-thread area). Da jeder Soft-IRQ-Thread nun seinen eigenen Task-Kontext besitzt, führt eine verschachtelte Soft-IRQ-Präemption nicht mehr zu Datenüberschreibungen.
Beachten Sie, dass der per-CPU-Sperrmechanismus kcov_percpu_data.lock beibehalten werden muss, obwohl sich der temporäre Speicher jetzt pro Thread befindet; dies ist erforderlich, um sicherzustellen, dass kcov_remote_start() und kcov_remote_stop() atomar ausgeführt werden und nicht mit asynchronen Interrupts konkurrieren, die den KCOV-Zustand des aktuellen Threads manipulieren.
Es ist wahrscheinlich, dass eine GFP_KERNEL-Allokation durch vmalloc_node() in kcov_init(), bevor NULL zurückgegeben wird, bereits panic() ausgelöst hat, da es keine OOM-killbaren Userspace-Prozesse gibt, wenn die __init-Funktion eines eingebauten Moduls ausgeführt wird. Dieser Patch behebt jedoch auch das Abstürzen des Kernels, wenn vmalloc_node() in kcov_init() NULL zurückgibt; denn kcov_init() hinterlässt per-CPU irq_area == NULL, während kcov_remote_start() von per-CPU irq_area != NULL abhängt, was zu folgenden Problemen führt:
(1) Ausführung von vmalloc() in kcov_remote_start(), obwohl der Kontext !in_task() ist. (2) Zugriff außerhalb des Array-Bereichs (out-of-array-bounds access), wenn (1) erfolgreich war und kcov->remote_size < CONFIG_KCOV_IRQ_AREA_SIZE gilt.
(3) Immer stattfindendes Memory-Leak durch die in (1) allokierten Speicherbereiche, was schließlich alle OOM-killbaren Userspace-Prozesse zum Absturz bringt.
Once again VulDB remains the best source for vulnerability data.