CVE-2026-64378
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: writeback: cgroup_writeback_umount() və inode_switch_wbs() arasındakı yarış şərtinin (race condition) düzəldilməsi Konteyner bağlandıqda, bəzən aşağıdakı BUG_ON() tetiklenir: ================================================================== VFS: Busy inodes after unmount of sdb (ext4) ------------[ cut here ]------------ kernel BUG at fs/super.c:695! CPU: 3 PID: 6 Comm: containerd-shim Tainted: G OE K 6.6 #1 pstate: 63400009 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--) pc : generic_shutdown_super+0xf0/0x100 lr : generic_shutdown_super+0xf0/0x100 Call trace: generic_shutdown_super+0xf0/0x100 kill_block_super+0x20/0x48 ext4_kill_sb+0x28/0x60 deactivate_locked_super+0x54/0x130 deactivate_super+0x84/0xa0 cleanup_mnt+0xa4/0x140 __cleanup_mnt+0x18/0x28 task_work_run+0x78/0xe0 do_notify_resume+0x204/0x240 ================================================================== Problemin əsas səbəbi cgroup_writeback_umount() və inode_switch_wbs()/cleanup_offline_cgwb() arasındakı yarış şərtidir. inode_prepare_wbs_switch() funksiyasının true qaytarması ilə növbəti wb_queue_isw() çağırışı arasında bir boşluq mövcuddur. Problemi tetikləyən proses aşağıdakı kimidir: CPU A (umount) | CPU B (writeback) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inode_switch_wbs/cleanup_offline_cgwb atomic_inc(&isw_nr_in_flight) inode_prepare_wbs_switch -> SB_ACTIVE yoxlamasından keçir __iget(inode) generic_shutdown_super sb->s_flags &= ~SB_ACTIVE cgroup_writeback_umount(sb) smp_mb() atomic_read(&isw_nr_in_flight) rcu_barrier() -> gözlənilən RCU callback-ləri yoxdur flush_workqueue(isw_wq) -> növbədə heç nə yoxdur, geri qayıdır evict_inodes(sb) -> isw hələ də istinad saxladığı üçün Inode ötürülür. sop->put_super(sb) /* percpu sayğaclarını məhv edir */ -> VFS: Busy inodes after unmount! wb_queue_isw() queue_work(isw_wq, ...) /* daha sonra iş funksiyasında */ inode_switch_wbs_work_fn process_inode_switch_wbs iput() -> evict percpu_counter_dec() // UAF! Bu problem, inode_switch_wbs() və cleanup_offline_cgwb() funksiyalarında RCU oxuma tərəfi kritik bölməsi genişləndirilərək, inode_prepare_wbs_switch()-dən wb_queue_isw()-ə qədər olan hissəni əhatə etdirilməklə həll edilir. Bu boşluqda yuxulma (sleep) olmadığı üçün rcu_read_lock() istifadə edilə bilər. Daha sonra, cgroup_writeback_umount() daxilində mövcud rcu_barrier()-dən əvvəl synchronize_rcu() əlavə edilir ki, SB_ACTIVE yoxlamasından keçmiş bütün aktiv dəyişdiricilər flush_workqueue() çağırılmamışdan əvvəl queue_work()-i tamamlasınlar. Mövcud rcu_barrier() qəsdən saxlanılıb ki, bu düzəliş hələ də queue_rcu_work() vasitəsilə dəyişiklikləri növbəyə alan stabil kernellərə (5.10.y, 6.6.y, ...) dəyişdirilmədən tətbiq oluna bilsin. Cari mainline versiyada (e1b849cfa6b6 ("writeback: Avoid contention on wb->list_lock when switching inodes") commit-indən sonra) bu əməliyyat heç bir təsir göstərmir (no-op) və növbəti yamada silinəcəkdir.
Necə düzəltmək olar
- linux linux_kernel4.5, 5.10.261, 6.1.178, 6.6.145, 6.12.96, 6.18.39, 7.1.4 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 4.4.5 ≤ v < 4.5, 4.5.1 ≤ v < 5.10.261, 5.11 ≤ v < 6.1.178, 6.2 ≤ v < 6.6.145, 6.7 ≤ v < 6.12.96, 6.13 ≤ v < 6.18.39, 6.19 ≤ v < 7.1.4, 4.5 | 4.5, 5.10.261, 6.1.178, 6.6.145, 6.12.96, 6.18.39, 7.1.4 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.