CVE-2026-99000
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: drm/xe: İç-içə keçmiş xarici pinlərdə shrinker uçotunun iki dəfə çıxılması xətası düzəldildi xe_bo_pin_external() və xe_bo_unpin_external() funksiyaları iç-içə keçmiş pinləri dəstəkləyir, çünki altda yatan ttm_bo_pin()/ttm_bo_unpin() funksiyaları boolean əvəzinə pin_count refcount-unu saxlayır. Lakin, shrinker uçotu çağırışları olan xe_ttm_tt_account_subtract() və xe_ttm_tt_account_add() yalnız pinlənmiş vəziyyətə keçid zamanı və ya həmin vəziyyətdən çıxış zamanı deyil, hər bir pin_external()/unpin_external() çağırışı zamanı şərtsiz olaraq icra edilir. Xarici BO (dma-buf), artıq pinlənmiş halda olduğu zaman birdən çox dəfə pinlənə bilər; məsələn, onun çoxlu sayda qoşulmaları/import edənləri olduqda və onların hər biri müstəqil olaraq xe_bo_pin_external() çağırdıqda. Belə hər bir iç-içə pin, BO səhifələrini shrinker uçotundan yenidən çıxır, halbuki BO səhifələri artıq birinci pin tərəfindən nəzərdən çıxarılmışdı. Simmetrik olaraq, hər bir iç-içə unpin, BO faktiki olaraq unpin edilməzdən əvvəl onları yenidən geri əlavə edir. Bu, shrinkerin səhifə və obyekt saylarının reallıqla sinxronizasiyasını pozur və onlar signed long kimi elan edilsə də, xe_shrinker_count() funksiyasında unsigned long kimi şərh edildiyi üçün, underflow böyük bir shrinkable/purgeable səhifə sayına çevrilə bilər ki, bu da yaddaş təzyiqi altında shrinkerin həddindən artıq çağırılmasına səbəb olur. Uçot çağırışlarını, pinned_link siyahısının idarə olunmasını qorumaq üçün artıq istifadə edilən eyni pin-count keçid yoxlamaları ilə qoruyun, beləliklə uçot yalnız ən xarici pin və sonuncu unpin zamanı yenilənəcəkdir. Bu məntiq xe_bo_account_pin()/xe_bo_account_unpin() funksiyalarında mərkəzləşdirilərkən, import edilmiş dma-buflara təsir edən ikinci, əlaqəli uçot boşluğu da aradan qaldırıldı. Import edilmiş bo-nun ttm_tt-si üçün xe-nin ttm_tt_populate hook-u (xe_ttm_tt_populate()), TTM_TT_FLAG_EXTERNAL təyin edilib lakin TTM_TT_FLAG_EXTERNAL_MAPPABLE təyin edilmədiy üçün xe_ttm_tt_account_add() çağırmadan erkən return verir. Lakin TTM nüvəsinin ttm_tt_populate() wrapper-i drayver-hook uğurlu olduqda tt-ni şərtsiz olaraq populate edilmiş kimi qeyd edir, buna görə də ttm_tt_is_populated() hələ də true hesabatı verir. xe_bo_account_pin()/xe_bo_account_unpin() funksiyaları ttm_tt_is_populated()-i "bu səhifələr shrinker tərəfindən uçota alınıb" ifadəsinin proksisi kimi qəbul edirdi və ilk növbədə heç vaxt əlavə edilməmiş belə bir tt üçün səhifələri çıxa/əlavə edəcəkdi ki, bu da yenidən shrinker saylarında underflow yaradacaqdı. Buna hazırda xe_bo_pin_external() vasitəsilə çatmaq mümkündür və bu yamama __xe_pin_fb_vma()-nı aşağıda xe_bo_pin_account() vasitəsilə yönləndirdikdən sonra fb-pin yolu ilə yeni şəkildə əlçatan olacaqdı; buna görə də, regressiyanı düzəltməzdən əvvəl onu tətbiq edən commit-dən qaçmaq üçün bunu sonrakı yamamada deyil, burada düzəldin. Yeni xe_ttm_bo_is_imported() köməkçi funksiyası vasitəsilə, xe_ttm_tt_populate()/xe_ttm_tt_unpopulate() funksiyalarının hərəkət etmək üçün istifadə etdiyi eyni EXTERNAL && !EXTERNAL_MAPPABLE testindən istifadə edərək import edilmiş bo-lar üçün uçotu ötürün. v2: - Sashiko AI rəycində aşkar edilən kritik problem düzəldildi: burada tətbiq edilən pin-count keçid yoxlaması hələ də fb-pin yolu (__xe_pin_fb_vma()/__xe_unpin_fb_vma()) tərəfindən yan keçilirdi, bu isə fb-unpin həqiqi sonuncu unpin-i yerinə yetirdiyi zaman köhnəlmiş pinned_link yazısı və daimi shrinker uçotu sızıntısı qoya bilərdi. Bu, öz Fixes: teqi olan ayrı bir xəta olduğu üçün bura daxil edilməmiş, seriyadakı ayrıca izləyici yamamada həll edilmişdir. - xe_bo_unpin_external() funksiyasındakı lazımsız lokal "last_unpin" dəyişəni silindi və orijinal inline bo->ttm.pin_count == 1 yoxlaması bərpa edildi; bu, yeni uçot köməkçiləri tərəfindən istifadə edilməyən sadəcə ad dəyişikliyi idi və onsuz da izləyici yamama tərəfindən silinəcəkdi. v3: - Import edilmiş dma-buflar pin/unpin shrinker uçotundan kənarlaşdırıldı və Sashiko AI rəycində aşkar edilən digər underflow problemi düzəldildi. - Backup-obyekt pin sahəsinə, onun pin zamanı artıq populate/uçota alındığını qeyd edən qısa şərh əlavə edildi (kod düzəlişi tələb olunmayan false-positive aydınlaşdırma kimi), bu da Sashiko AI tərəfindən aşkar edilən ayrıca Orta-səviyyəli uçot sızıntısı narahatlığını həll edir.
Necə düzəltmək olar
- Linux Linux993c952e6832ad0aa4be82e11f0760b1f532090a, ab39bc55cf08208b8511b1c09926b1b646a8befc, 83d5acca1f4f6132038ea88c72c5844f62e42d44 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | 00c8efc3180f0cf919b53980e969430657e01685 ≤ v < 993c952e6832ad0aa4be82e11f0760b1f532090a, 00c8efc3180f0cf919b53980e969430657e01685 ≤ v < ab39bc55cf08208b8511b1c09926b1b646a8befc, 00c8efc3180f0cf919b53980e969430657e01685 ≤ v < 83d5acca1f4f6132038ea88c72c5844f62e42d44, 6.15 | 993c952e6832ad0aa4be82e11f0760b1f532090a, ab39bc55cf08208b8511b1c09926b1b646a8befc, 83d5acca1f4f6132038ea88c72c5844f62e42d44 |
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.