CVE-2026-98536 in Linux
Zusammenfassung
von VulDB • 18.10.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
writeback: Melden eines Tasks-RCU-Ruhezustands (quiescent state) pro cgwb-Ablaufpass
cleanup_offline_cgwbs_workfn() leert einen sterbenden cgwb, indem es cleanup_offline_cgwb() aufruft, bis dies false zurückgibt, wobei zwischen den Durchläufen ein cond_resched() eingefügt ist. Bei einem Kernel mit CONFIG_PREEMPTION hat dieses cond_resched() keine Wirkung: _cond_resched() ist eine einfache „return 0“, und unter PREEMPT_DYNAMIC deaktivieren die vollständigen (full) und lazy-Modi es. Seit dem Commit 7dadeaa6e851 („sched: Further restrict the preemption modes“) sind dies die einzigen beiden Modelle auf den Architekturen mit PREEMPT_LAZY-Unterstützung, darunter arm64 und x86, sodass der Leerdurchlauf (drain loop) niemals einen Tasks-RCU-Ruhezustand meldet.
Ein Worker, der einen cgwb mit Millionen angehängeter Inodes leert, läuft mehrere Minuten lang. Auf einem 6.18-arm64-Host im lazy-Modus hat der cgwb-Worker das Writeback-Domain einer sterbenden cgroup über 11 Minuten hinweg geleert. Ein BPF-Programm zum Entfernen von Links (bpf_trampoline_unlink_prog -> bpf_trampoline_update -> unregister_ftrace_direct -> ftrace_shutdown -> synchronize_rcu_tasks()) wartete auf diese Grace Period, während es den Trampoline-Mutex hielt; 42 Aufgaben waren in D-Zustand dahinter eingereiht, und der Detektor für hängende Tasks (hung task detector) löste bei 614 s aus und verursachte einen Panic des Hosts. Jedes BPF- oder ftrace-Detach während eines langen Leerdurchlaufs erbt die Länge dieses Durchlaufs.
Beheben Sie dies, indem Sie cond_resched_tasks_rcu_qs() aufrufen, damit niemand gestoppt wird, der sycnrhonize_rcu_tasks() aufruft. Wir haben dies in eine do { } while-Schleife eingebettet, da cleanup_offline_cgwb() bei vielen kleinen cgroups false zurückgeben würde und wir cond_resched_tasks_rcu_qs() niemals aufrufen würden, was das gleiche Problem erzeugen würde.
If you want to get best quality of vulnerability data, you may have to visit VulDB.