CVE-2021-46925

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: net/smc: smc_sock yarış vəziyyətinin səbəb olduğu kernel panic xətası düzəldildi smc_cdc_tx_handler() funksiyası smc_sock obyektinə müraciət etməyə çalışdıqda, lakin smc_release() onu artıq azad etdikdə sistem çökməsi baş verir. [ 4570.695099] BUG: unable to handle page fault for address: 000000002eae9e88 [ 4570.696048] #PF: supervisor write access in kernel mode [ 4570.696728] #PF: error_code(0x0002) - not-present page [ 4570.697401] PGD 0 P4D 0 [ 4570.697716] Oops: 0002 [#1] PREEMPT SMP NOPTI [ 4570.698228] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.16.0-rc4+ #111 [ 4570.699013] Hardware name: Alibaba Cloud Alibaba Cloud ECS, BIOS 8c24b4c 04/0 [ 4570.699933] RIP: 0010:_raw_spin_lock+0x1a/0x30 <...> [ 4570.711446] Call Trace: [ 4570.711746] <IRQ> [ 4570.711992] smc_cdc_tx_handler+0x41/0xc0 [ 4570.712470] smc_wr_tx_tasklet_fn+0x213/0x560 [ 4570.712981] ? smc_cdc_tx_dismisser+0x10/0x10 [ 4570.713489] tasklet_action_common.isra.17+0x66/0x140 [ 4570.714083] __do_softirq+0x123/0x2f4 [ 4570.714521] irq_exit_rcu+0xc4/0xf0 [ 4570.714934] common_interrupt+0xba/0xe0 smc_cdc_tx_handler() smc bağlantısının mövcudluğunu yoxlasa da, smc_cdc_tx_handler() ona yenidən müraciət etməzdən əvvəl smc_release() smc soketini artıq ləğv etmiş və azad etmiş ola bilər. smc_cdc_tx_handler() |smc_release() if (!conn) | | |smc_cdc_tx_dismiss_slots() | smc_cdc_tx_dismisser() | |sock_put(&smc->sk) <- sonuncu sock_put, | smc_sock azad edildi bh_lock_sock(&smc->sk) (panic) | smc_sock azad edildikdən sonra heç bir CDC mesajının alınmadığından əmin olmaq üçün, yolda olan CDC mesajları (QP-ya göndərilmiş, lakin müvafiq CQE-si hələ alınmamış) üçün smc_connection üzərində istinad sayğacı (refcount) əlavə edilmişdir və uğurlu və ya uğursuz bütün yoldakı CDC mesajları tamamlanana qədər smc_connection azad edilmir. CDC mesajlarında istinad sayğacının istifadəsi başqa bir problemi ortaya çıxarır: bağlantı məhv edilərkən, smcr_link_clear() QP-ni sıfırlayacaq ki, bu da CQ-da həmin QP ilə bağlı bütün gözlənilən CQE-ləri silir. Bütün CQE-lərin geri dönəcəyinə və beləliklə smc_connection üzərindəki istinad sayğacının həmişə 0-a çatacağına əmin olmaq üçün smc_ib_modify_qp_reset() funksiyası smc_ib_modify_qp_error() ilə əvəz edilmişdir. Həmçinin, smc_wr_tx_wait_no_pending_sends() funksiyasındakı vaxtaşımı (timeout) silinmişdir, çünki biz bütün gözlənilən WQE-lərin tamamlanmasını gözləməliyik, əks halda CQE-lər emal edilərkən "use-after-free" xətası ilə qarşılaşa bilərik. IB cihazının silinmə proseduru üçün, cihazdakı CQ-ları məhv etməzdən əvvəl həmin cihazdakı bütün QP-lərin məhv edilməsini gözləməliyik, əks halda smc_connection üzərindəki istinad sayğacı 0-a çatmayacaq və smc_sock azad edilə bilməyəcək.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc27 fev 2024
İlk görülmə27 fev 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel5.10.90, 5.15.13 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel4.11.0 ≤ v < 5.10.90, 5.11.0 ≤ v < 5.15.135.10.90, 5.15.13

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.

Intelligence 360 paketində

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.

CVE-2021-46925 · Linux Kernel · Dark Radar