CVE-2025-71194
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: btrfs: nəzərə alınmayan tranzaksiya tipi səbəbindən wait_current_trans()-də yaranan deadlock probleminin həlli start_transaction() zamanı wait_current_trans() çağırıldıqda, hazırda verilmiş tranzaksiya tipinin həmin konkret tranzaksiya vəziyyətini gözləməli olub-olmadığını nəzərə almadan bloklanmış tranzaksiyanı gözləyir. btrfs_blocked_trans_types[] massivi artıq hansı tranzaksiya tiplərinin hansı tranzaksiya vəziyyətlərini gözləməli olduğunu müəyyən edir, lakin bu yoxlama wait_current_trans()-də çatışmırdı. Bu, iki tranzaksiya və gözlənilən nizamlı ekstenslər (pending ordered extents) ilə bağlı deadlock ssenarisinə səbəb ola bilər: 1. Tranzaksiya A TRANS_STATE_COMMIT_DOING vəziyyətindədir. 2. Nizamlı ekstensləri emal edən bir işçi (worker) TRANS_JOIN ilə start_transaction() çağırır. 3. Tranzaksiya A TRANS_STATE_COMMIT_DOING vəziyyətində olduğu üçün join_transaction() -EBUSY qaytarır. 4. Tranzaksiya A TRANS_STATE_UNBLOCKED vəziyyətinə keçir və tamamlanır. 5. Yeni Tranzaksiya B yaradılır (TRANS_STATE_RUNNING). 6. 2-ci addımdakı nizamlı ekstens Tranzaksiya B-nin gözlənilən nizamlı ekstenslər siyahısına əlavə edilir. 7. Başqa bir tapşırıq tərəfindən Tranzaksiya B dərhal commit prosesini başladır və TRANS_STATE_COMMIT_START vəziyyətinə keçir. 8. İşçi nəhayət wait_current_trans()-ə çatır, Tranzaksiya B-ni TRANS_STATE_COMMIT_START (bloklanmış vəziyyət) vəziyyətində görür və şərtsiz gözləyir. 9. Lakin, btrfs_blocked_trans_types[]-ə əsasən, TRANS_JOIN TRANS_STATE_COMMIT_START vəziyyətini GÖZLƏMƏMƏLİDİR. 10. Tranzaksiya B gözlənilən nizamlı ekstenslərin tamamlanmasını gözləyir. 11. Deadlock: Tranzaksiya B nizamlı ekstensləri gözləyir, nizamlı ekstens isə Tranzaksiya B-ni gözləyir. Bu, aşağıdakı çağırış stekləri ilə izah edilə bilər: CPU0 CPU1 btrfs_finish_ordered_io() start_transaction(TRANS_JOIN) join_transaction() # -EBUSY (Tranzaksiya A # TRANS_STATE_COMMIT_DOING vəziyyətindədir) # Tranzaksiya A tamamlanır # Tranzaksiya B yaradılır # nizamlı ekstens Tranzaksiya B-nin # gözlənilən siyahısına əlavə edilir btrfs_commit_transaction() # Tranzaksiya B # TRANS_STATE_COMMIT_START vəziyyətinə keçir # gözlənilən nizamlı ekstensləri # gözləyir wait_current_trans() # Tranzaksiya B-ni gözləyir # (gözləməməlidir!) btrfs_commit_transaction-da nizamlı ekstensləri gözləyən bstore_kv_sync tapşırığı: __schedule+0x2e7/0x8a0 schedule+0x64/0xe0 btrfs_commit_transaction+0xbf7/0xda0 [btrfs] btrfs_sync_file+0x342/0x4d0 [btrfs] __x64_sys_fdatasync+0x4b/0x80 do_syscall_64+0x33/0x40 entry_SYSCALL_64_after_hwframe+0x44/0xa9 wait_current_trans-da tranzaksiya commit-ini gözləyən kworker tapşırığı: Workqueue: btrfs-syno_nocow btrfs_work_helper [btrfs] __schedule+0x2e7/0x8a0 schedule+0x64/0xe0 wait_current_trans+0xb0/0x110 [btrfs] start_transaction+0x346/0x5b0 [btrfs] btrfs_finish_ordered_io.isra.0+0x49b/0x9c0 [btrfs] btrfs_work_helper+0xe8/0x350 [btrfs] process_one_work+0x1d3/0x3c0 worker_thread+0x4d/0x3e0 kthread+0x12d/0x150 ret_from_fork+0x1f/0x30 Bu problem, tranzaksiya tipini wait_current_trans()-ə ötürmək və gözləməyə qərar verməzdən əvvəl btrfs_blocked_trans_types[cur_trans->state]-i verilmiş tipə görə yoxlamaqla həll edilmişdir. Bu, müəyyən bloklanmış vəziyyətlərdə qoşulmağa icazə verilən tranzaksiya tiplərinin lazımsız yerə gözləməməsini və deadlock yaratmamasını təmin edir.
Necə düzəltmək olar
- Linux Linuxe563f59395981fcd69d130761290929806e728d6, dc84036c173cff6a432d9ab926298850b1d2a659, d7b04b40ac8e6d814e35202a0e1568809b818295, 99da896614d17e8a84aeb2b2d464ac046cc8633d, 8b0bb145d3bc264360f525c9717653be3522e528, 9ac63333d600732a56b35ee1fa46836da671eb50, 5037b342825df7094a4906d1e2a9674baab50cb2 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 4a9d8bdee368de78ace8b36da4eb2186afea162d ≤ v < e563f59395981fcd69d130761290929806e728d6, 4a9d8bdee368de78ace8b36da4eb2186afea162d ≤ v < dc84036c173cff6a432d9ab926298850b1d2a659, 4a9d8bdee368de78ace8b36da4eb2186afea162d ≤ v < d7b04b40ac8e6d814e35202a0e1568809b818295, 4a9d8bdee368de78ace8b36da4eb2186afea162d ≤ v < 99da896614d17e8a84aeb2b2d464ac046cc8633d, 4a9d8bdee368de78ace8b36da4eb2186afea162d ≤ v < 8b0bb145d3bc264360f525c9717653be3522e528, 4a9d8bdee368de78ace8b36da4eb2186afea162d ≤ v < 9ac63333d600732a56b35ee1fa46836da671eb50, 4a9d8bdee368de78ace8b36da4eb2186afea162d ≤ v < 5037b342825df7094a4906d1e2a9674baab50cb2, 3.11 | e563f59395981fcd69d130761290929806e728d6, dc84036c173cff6a432d9ab926298850b1d2a659, d7b04b40ac8e6d814e35202a0e1568809b818295, 99da896614d17e8a84aeb2b2d464ac046cc8633d, 8b0bb145d3bc264360f525c9717653be3522e528, 9ac63333d600732a56b35ee1fa46836da671eb50, 5037b342825df7094a4906d1e2a9674baab50cb2 |
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.