CVE-2026-89491
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: ocfs2: cluster: o2hb_region_pin() funksiyasında o2hb_live_lock tutulmuş halda yuxuya getməyin qarşısı alınsın "ocfs2: cluster: o2hb_region_pin() fixes", v2 yamaları seriyası. Bu seriya o2hb_region_pin() funksiyasındakı üç əlaqəli problemi həll edir və bunların hamısı 58a3158a5d17 ("ocfs2/cluster: Pin/unpin o2hb regions") commit-indəki orijinal tətbiqdən qaynaqlanır: 1) Funksiya o2hb_live_lock (bir spinlock) tutulmuş halda çağırılır, lakin alt strukturda olan configfs_depend_item() yuxuya gedir (inode rwsem-i götürür və fayl sistemini pinləyir). Bu, CONFIG_DEBUG_ATOMIC_SLEEP aktiv olduqda BUG xətasına səbəb olur. 2) configfs drop_item geri çağırma (callback) funksiyasından çağırıldıqda, kilid ardıcıllığının tərs çevrilməsi (lock order inversion) yaradır: valideyn inode_lock -> configfs kök inode_lock; bu isə kök -> valideyn ardıcıllığını izləyən subsystem qeydiyyatdan çıxarma yolları ilə qarşılaşdıqda deadloqa (ölü kilidləməyə) səbəb ola bilər. 3) Əgər o2hb_region_inc_user() zamanı pinləmə prosesi yarıda uğursuz olarsa, o2hb_dependent_users sayğacı sızır və qismən pinlənmiş bölgələr heç vaxt azad edilmir, bu da növbəti mount əməliyyatlarında heartbeat bölgələrinin qorumasız qalmasına səbəb olur. Yama 1, hər bir yuxuya gedən configfs_depend_item() çağırışı zamanı o2hb_live_lock kilidini buraxmaq üçün o2hb_region_pin() funksiyasını yenidən işləyir və kilid açıq olduğu müddətdə bölgəni aktiv saxlamaq üçün config_item istinadından istifadə edir. Yama 2, configfs kontekstindən çağırıldıqda configfs_depend_item_unlocked() funksiyasını seçmək üçün from_callback parametrini əlavə edir və beləliklə inode_lock iç-içə yerləşməsinin qarşısını alır. Yama 3, xəta baş verdikdə pinləməni ləğv etmək və sayğacı azaltmaq üçün o2hb_region_inc_user() funksiyasındakı xəta yolunu düzəldir. Bu yama (3-dən biri): o2hb_region_pin() həmişə o2hb_live_lock spinlock-u tutulmuş halda çağırılır (o2hb_region_inc_user() və o2hb_heartbeat_group_drop_item() vasitəsilə), lakin o, yuxuya gedən o2nm_depend_item() -> configfs_depend_item() funksiyalarını çağırır: o, configfs fayl sistemini pinləyir və configfs kök inode rwsem-ni götürür. CONFIG_DEBUG_ATOMIC_SLEEP altında bu, aşağıdakını tetiklir: BUG: sleeping function called from invalid context at kernel/locking/rwsem.c in_atomic(): 1, ... name: mount.ocfs2 down_write configfs_depend_item o2hb_region_pin o2hb_region_inc_user o2hb_register_callback dlm_register_domain_handlers ... ocfs2_dlm_init ocfs2_mount_volume ocfs2_fill_super o2hb_region_pin() funksiyasını elə yenidən qurmaq lazımdır ki, yuxuya gedən çağırış zamanı kilidi buraxaraq hər dəfə yalnız bir bölgəni pinləsin: o2hb_live_lock altında növbəti uyğun bölgəni tapın və onu aktiv saxlamaq üçün config_item istinadı götürün, kilidi buraxın, o2nm_depend_item() funksiyasını çağırın, sonra kilidi yenidən götürün və pinləməni qeyd edin. config_item_put() əməliyyatı da kilid buraxılmış halda yerinə yetirilir, çünki o2hb_region_release() funksiyası da o2hb_live_lock-u əldə edir və yuxuya gedə bilər. Kilid açıq olduğu müddətdə bölgələr siyahısı dəyişə bildiyi üçün hər pinləmədən sonra skanlama yenidən yuxarıdan başlayır. Local heartbeat hələ də yalnız uyğun gələn bölgəni pinləyir; global heartbeat isə bütün uyğun bölgələri pinləyir. Unpin yolu təsirlənmir: configfs_undepend_item() yalnız spinlock götürür və yuxuya getmir.
Necə düzəltmək olar
- Linux Linux4d64f8da82fb9e8dbd5aa9b64c9bb6ac0decea03, 3b790774280a610f8bdbd5d4260a07345bcf8e04, 0cbc2f20a6ea7b4a59efa9171b7c694cdd196507, c9be4de77f97f383b750698e1517fd296041f4bb, 49002acc520c61002ad195894ac391c94317d3ba, ce035f208d68b812d83e5482980f2b1c88a9cd94, 470212a5eefabcc16b8e2f7fe2844b8737fe571c, af09df89db9a68a1d76df0f75667998135bc8d65 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < 4d64f8da82fb9e8dbd5aa9b64c9bb6ac0decea03, 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < 3b790774280a610f8bdbd5d4260a07345bcf8e04, 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < 0cbc2f20a6ea7b4a59efa9171b7c694cdd196507, 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < c9be4de77f97f383b750698e1517fd296041f4bb, 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < 49002acc520c61002ad195894ac391c94317d3ba, 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < ce035f208d68b812d83e5482980f2b1c88a9cd94, 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < 470212a5eefabcc16b8e2f7fe2844b8737fe571c, 58a3158a5d17ddf4894db9e8ccaf92093ff8e42e ≤ v < af09df89db9a68a1d76df0f75667998135bc8d65, 2.6.38 | 4d64f8da82fb9e8dbd5aa9b64c9bb6ac0decea03, 3b790774280a610f8bdbd5d4260a07345bcf8e04, 0cbc2f20a6ea7b4a59efa9171b7c694cdd196507, c9be4de77f97f383b750698e1517fd296041f4bb, 49002acc520c61002ad195894ac391c94317d3ba, ce035f208d68b812d83e5482980f2b1c88a9cd94, 470212a5eefabcc16b8e2f7fe2844b8737fe571c, af09df89db9a68a1d76df0f75667998135bc8d65 |
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.