CVE-2026-99217
Publiée le 2026-11-02 · Dernière modification le 2026-11-02
Le noyau Linux présente une faille dans sa gestion des échecs de création de processus (forking) lors de l'utilisation de certaines extensions d'ordonnancement basées sur BPF. Lorsqu'un fork échoue sous des conditions de synchronisation spécifiques, le système tente de nettoyer des fichiers tout en conservant un verrou critique. Cela crée une dépendance circulaire, où le processus de nettoyage attend un verrou qu'il détient déjà, ce qui entraîne un blocage complet (deadlock).
Un attaquant ayant la possibilité d'exécuter du code localement peut déclencher cet état pour geler toute nouvelle création de processus sur l'ensemble du système, entraînant une perte totale de disponibilité. Comme la faille implique une condition de concurrence (race condition) entre le threading et la fermeture des liens BPF, elle nécessite un timing précis pour être exécutée. Cependant, une fois déclenchée, elle neutralise efficacement la capacité de fonctionnement du système sans nécessiter de privilèges administratifs.
RÉFÉRENCES
Description officielle du NVD (en anglais)
In the Linux kernel, the following vulnerability has been resolved: fork: release the files of a failed fork after sched_cancel_fork() Reorder copy_process() cleanup so sched_fork() taking scx_fork_rwsem scx_pre_fork() is safe and isn't held around exiting files. Right now, a fork that fails while another thread closed the bpf link fd will deadlock against its own read side. It also blocks every fork on the system: copy_process() holds scx_fork_rwsem for read exit_files() close_files() filp_close_sync() bpf_scx_unreg() kthread_flush_work() waits for the disable work scx_root_disable() percpu_down_write(&scx_fork_rwsem) Simply release the child's files after sched_cancel_fork() dropped the lock. The task starts out as a copy of its parent so p->files points to the parent's table until copy_files() replaces it. exit_files() must not run for a fork that failed before that. Clear p->files up front so exit_files() is a no-op for those and make copy_files() set it explicitly for CLONE_FILES.