CVE-2026-98166
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: drm/ttm: dışarı aktarılan (swapped-out) kaynakların bulk_move aralığından hiçbir zaman ayrılmaması sorunu düzeltildi ttm_tt_swapout() fonksiyonu başarı durumunda dışarı aktarılan sayfa sayısını, hata durumunda ise negatif bir hata kodu döndürür; doldurulmuş bir ttm için asla sıfır döndürmez. b2ed01e7ad3d ("drm/ttm: Fix ttm_bo_swapout() infinite LRU walk on swapout failure") numaralı commit, ttm_bo_swapout_cb() içerisindeki bulk_move kayıt tutma işlemini "if (!ret)" altına taşıdı, bu nedenle ttm_resource_del_bulk_move_unevictable() / ttm_resource_move_to_lru_tail() çifti artık her başarılı dışarı aktarma işleminde atlanmaktadır. Shrinker için 1d59f36e95f7 ("drm/ttm: Fix ttm_bo_shrink() infinite LRU walk on backup failure") numaralı commit'teki eşdeğer değişiklik "lret > 0" durumunu test eder ki burada da amaçlanan buydu. b2ed01e7ad3d öncesinde kaynak, dışarı aktarmadan önce bulk_move üzerinden alınıyordu; o zamandan beri dışarı aktarılan bir kaynak, tahliye edilemez (unevictable) olmasına rağmen BO'nun bulk_move aralığında (ve yönetici LRU'da) kalmaya devam etmektedir. Daha sonra serbest bırakıldığında veya BO bulk_move'dan ayrıldığında (amdgpu_vm_bo_del() aracılığıyla ttm_resource_free(), ttm_bo_set_bulk_move()), ttm_resource_del_bulk_move() fonksiyonu !ttm_resource_unevictable() koruması nedeniyle bunu atlar, böylece pos->first / pos->last içindeki bir aralık uç noktası serbest bırakılmış belleği göstermeye devam eder. Bu imleç üzerindeki bir sonraki ttm_lru_bulk_move_tail() veya ttm_resource_add_bulk_move() çağrısı; ttm_lru_bulk_move_add() içindeki resv WARN, ttm_resource_move_to_lru_tail() içindeki "list_del corruption" veya ttm_resource_manager_next() içindeki bir NULL dereference olarak görülen bir serbest bırakıldıktan sonra kullanım (use-after-free) hatasına yol açar -- bu durum hazırda bekletme (hibernation) sonrası dakikalarca veya saatlerce sonra ya da hazırda bekletmeyi takip eden süreç çıkışında / yeniden başlatmada görülür. Samuel Ainsworth'ün drm/amd sorun 5387 analizi (bkz. Bağlantı), sarkan imleci tanımlamıştır; dışarı aktarma sırasında eksik olan kaldırma işlemi bunun sarkma nedenidir. Başarı koşulunun test edilmesi, kaldırma işlemini geri getirir. Backport içeren 7.0.y kararlı çekirdek üzerinde (Ubuntu 7.0.0-31) askıya al ve ardından hazırda beklet (suspend-then-hibernate) işlemi çalıştıran bir AMD Phoenix APU'da (ASUS UM3406GA, gfx1103), hata 18 hazırda bekletme döngüsünün 5'ini çökertmiştir; bir hazırda bekletmenin fonksiyon profili 336 ttm_tt_swapout() çağrısı ve sıfır ttm_resource_del_bulk_move_unevictable() çağrısı göstermiştir. Bu değişiklikle birlikte kaldırma işlemi her dışarı aktarılan kaynak için gerçekleşmiş ve sonraki 12 döngü sorunsuz tamamlanmıştır.
Nasıl düzeltilir
- Linux Linuxb48ebe399b4e72baa323462580fdd83ebda561e1, 1169fe8c11ca45e3f91d59a73eb271d0ca8a7fb0, 3db7d7d583419f7b1f2e141e36418802dbb25cf8, 6.18.59, 7.1 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 060f8f3020516d71bc4d6159d4d0beef85606a74 ≤ v < b48ebe399b4e72baa323462580fdd83ebda561e1, b2ed01e7ad3de80333e9b962a44024b094bc0b2b ≤ v < 1169fe8c11ca45e3f91d59a73eb271d0ca8a7fb0, b2ed01e7ad3de80333e9b962a44024b094bc0b2b ≤ v < 3db7d7d583419f7b1f2e141e36418802dbb25cf8, 0124a09e3e5f5f6080efe9663b27af27933f8382, 6.18.57 ≤ v < 6.18.59, 7.0.10 ≤ v < 7.1, 7.1 | b48ebe399b4e72baa323462580fdd83ebda561e1, 1169fe8c11ca45e3f91d59a73eb271d0ca8a7fb0, 3db7d7d583419f7b1f2e141e36418802dbb25cf8, 6.18.59, 7.1 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.