CVE-2023-53087
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: drm/i915/active: Boş olmayan baryerlərin fence izləyicisi kimi səhv istifadəsinin düzəldilməsi İstifadəçilər i915 perf-dən bir neçə eyni vaxtda işləyən qrafik tətbiqi ilə istifadə edərkən siyahı korrupsiyaları üzrə oopslar barədə məlumat verdilər. Əsas səbəb təhlili baryer emalı kodunda problemə işarə etdi -- kernel kontekstində perf open / close zamanı aktiv baryerlərin perf sorğuları ilə əvəz edilməsi ilə istifadəçi kontekstinin ilk pin / son unpin zamanı yerinə yetirilən eyni vaxtlı baryer preallocate / acquire əməliyyatları arasında yarış. Kompozit izləyiciyə sorğu əlavə edərkən biz artıq ayrılmış və həmin kompozitdə qeydiyyata alınmış mövcud fence izləyicisini təkrar istifadə etməyə çalışırıq. Əldə etdiyimiz izləyici artıq başqa fence-i izləyə bilər, boş baryer və ya aktiv baryer ola bilər. Əgər əldə etdiyimiz izləyici boş olmayan baryerə uyğun gəlirsə, onda biz həmin baryeri aid olduğu baryer tapşırıqları siyahısından silməyə çalışırıq. Lakin bunu edərkən biz baryerin silinməsini yerinə yetirən funksiyanın qaytardığı dəyəri nəzərə almırıq. Əgər silinmə hər hansı səbəbdən uğursuz olarsa, biz hələ də baryer tapşırığı kimi qeydiyyata alınmış izləyicini təkrar istifadə etmiş olarıq. Eyni struktur sahəsi həm fence callback siyahılarında, həm də baryer tapşırıqları siyahısında təkrar istifadə olunduğundan, siyahı korrupsiyaları çox güman ki, baş verərdi. İndi baryerlər baryer tapşırıqları siyahısından müvəqqəti olaraq siyahı məzmununu çıxarmaq, həmin məzmunu silinəcək qovşağı keçməklə gəzmək, sonra isə siyahını dəyişdirilmiş məzmunla yenidən doldurmaqla silinir. Əgər bu qəsdən yarışlı eyni vaxtlı silinmə cəhdləri ardıcıllaşdırılmasa, onlardan biri və ya bir neçəsi siyahının müvəqqəti boş olması səbəbindən uğursuz ola bilər. Baryerin silinməsinin nəticələrini nəzərə almayan əlaqəli kod ilk dəfə v5.4-də d8af05ff38ae commit-i ("drm/i915: Allow sharing the idle-barrier from other kernel requests") ilə təqdim edilmişdir. Lakin o zaman baryerin silinməsi rutininin bütün istifadəçiləri görünür ardıcıllaşdırılmışdı, ona görə də problem özünü göstərmirdi. Yeni hazırlanmış igt@gem_barrier_race@remote-request IGT testinin köməyi ilə aparılmış git bisect nəticələri göstərir ki, siyahı korrupsiyaları v5.5-də təqdim edilmiş 311770173fac commit-indən ("drm/i915/gt: Schedule request retirement when timeline idles") sonra görünməyə başlaya bilər. Baryerin silinmə cəhdlərinin nəticələrini nəzərə alın -- baryeri yalnız siyahıdan uğurla silindikdə boş kimi işarələyin. Sonra, fence-imizi hazırda izlənilən kimi təyin etməyə davam etməzdən əvvəl əmin olun ki, əldə etdiyimiz izləyici boş olmayan baryer deyil. Əgər bu yoxlama uğursuz olarsa, onda həmin izləyicidən istifadə etməyin, əksinə geri qayıdın və yeni, istifadəyə yararlı birini əldə etməyə çalışın. v3: hansı nəticəni gözlədiyimizi sənədləşdirmək üçün unlikely() istifadə edin (Andi), - commit təsvirindəki səhv qrammatikanı düzəldin. v2: kod dəyişikliyi yoxdur, - günahı d8af05ff38ae commit-inə ("drm/i915: Allow sharing the idle-barrier from other kernel requests"), v5.4-ə deyil, 311770173fac commit-inə ("drm/i915/gt: Schedule request retirement when timeline idles"), v5.5-ə yönəldin, - commit təsvirini yenidən ifadə edin. (506006055769b10d1b2b4e22f636f3b45e0e9fc7 commit-indən cherry-pick edilmişdir)
Necə düzəltmək olar
- linux linux_kernel5.10.176, 5.15.104, 6.1.21, 6.2.8 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.5 ≤ v < 5.10.176, 5.11 ≤ v < 5.15.104, 5.16 ≤ v < 6.1.21, 6.2 ≤ v < 6.2.8, 6.3 | 5.10.176, 5.15.104, 6.1.21, 6.2.8 |
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.