CVE-2022-49159
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: scsi: qla2xxx: SRB üçün istinad sayğacının tətbiqi Timeout idarəçisi və tamamlanma funksiyası arasında yarış vəziyyəti (race condition) mövcuddur. qla2x00_async_iocb_timeout() işləməyə başladıqda, o, normal cavab yolu (firmware vasitəsilə?) tərəfindən preempt edilə bilər. qla24xx_async_gpsc_sp_done() SRB-ni şərtsiz olaraq azad edir. Yenidən qla2x00_async_iocb_timeout()-a qayıdıldıqda, qla24xx_async_abort_cmd() azad edilmiş sp->qpair göstəricisinə müraciət edəcəkdir: qla2xxx [0000:83:00.0]-2871:0: Async-gpsc timeout - hdl=63d portid=234500 50:06:0e:80:08:77:b6:21. qla2xxx [0000:83:00.0]-2853:0: Async done-gpsc res 0, WWPN 50:06:0e:80:08:77:b6:21 qla2xxx [0000:83:00.0]-2854:0: Async-gpsc OUT WWPN 20:45:00:27:f8:75:33:00 speeds=2c00 speed=0400. qla2xxx [0000:83:00.0]-28d8:0: qla24xx_handle_gpsc_event 50:06:0e:80:08:77:b6:21 DS 7 LS 6 rc 0 login 1|1 rscn 1|0 lid 5 BUG: unable to handle kernel NULL pointer dereference at 0000000000000004 IP: qla24xx_async_abort_cmd+0x1b/0x1c0 [qla2xxx] Bunun aşkar həlli istinad sayğacının (reference counter) tətbiqidir. Normal kod yolu ('yaxşı' hal) üçün bir istinad və timeout yolu üçün bir istinad götürülür. Normal yaxşı hal ilə timeout/abort idarəçisi arasında daim yarış olduğu üçün biz bunu seriyallaşdırmalıyıq. Həmçinin, idarəçilər arasında hər hansı ardıcıllığı fərz edə bilmərik. Bu yavaş yol (slow path) olduğundan, kilidlər (locks) vasitəsilə müvafiq sinxronizasiyadan istifadə edə bilərik. Taymeri ləğv edə bildikdə (del_timer 1 qaytardıqda), timeout idarəçisinin vaxtı hələ bitmədiyini, buna görə də heç bir xəta idarəetməsinin davam etmədiyini bilirik, beləliklə, istinad sayğacını təhlükəsiz şəkildə bir vahid azalda bilərik. Əgər taymeri ləğv edə bilmiriksə, deməli abort idarəçisi işləyir. Biz kref_put() çağırmazdan əvvəl abort idarəçilərində sp->done() funksiyasının çağırıldığından əmin olmalıyıq.
Necə düzəltmək olar
- linux linux_kernel5.15.33, 5.16.19, 5.17.2 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 | 5.15 ≤ v < 5.15.33, 5.16 ≤ v < 5.16.19, 5.17 ≤ v < 5.17.2 | 5.15.33, 5.16.19, 5.17.2 |
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.