CVE-2025-38389
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: drm/i915/gt: VMA ayırma hatasında tutulan zaman çizelgesinin düzeltilmesi Bir testin ring gönderim platformunda i915 sürücüsünü ayırması (unbind) durumunda, CI tarafından ara sıra şu hata raporlanmıştır: <4> [239.330153] ------------[ cut here ]------------ <4> [239.330166] i915 0000:00:02.0: [drm] drm_WARN_ON(dev_priv->mm.shrink_count) <4> [239.330196] WARNING: CPU: 1 PID: 18570 at drivers/gpu/drm/i915/i915_gem.c:1309 i915_gem_cleanup_early+0x13e/0x150 [i915] ... <4> [239.330640] RIP: 0010:i915_gem_cleanup_early+0x13e/0x150 [i915] ... <4> [239.330942] Call Trace: <4> [239.330944] <TASK> <4> [239.330949] i915_driver_late_release+0x2b/0xa0 [i915] <4> [239.331202] i915_driver_release+0x86/0xa0 [i915] <4> [239.331482] devm_drm_dev_init_release+0x61/0x90 <4> [239.331494] devm_action_release+0x15/0x30 <4> [239.331504] release_nodes+0x3d/0x120 <4> [239.331517] devres_release_all+0x96/0xd0 <4> [239.331533] device_unbind_cleanup+0x12/0x80 <4> [239.331543] device_release_driver_internal+0x23a/0x280 <4> [239.331550] ? bus_find_device+0xa5/0xe0 <4> [239.331563] device_driver_detach+0x14/0x20 ... <4> [357.719679] ---[ end trace 0000000000000000 ]--- Test aynı zamanda i915 modülünü de kaldırırsa, bunu şu takip eder: <3> [357.787478] ============================================================================= <3> [357.788006] BUG i915_vma (Tainted: G U W N ): Objects remaining on __kmem_cache_shutdown() <3> [357.788031] ----------------------------------------------------------------------------- <3> [357.788204] Object 0xffff888109e7f480 @offset=29824 <3> [357.788670] Allocated in i915_vma_instance+0xee/0xc10 [i915] age=292729 cpu=4 pid=2244 <4> [357.788994] i915_vma_instance+0xee/0xc10 [i915] <4> [357.789290] init_status_page+0x7b/0x420 [i915] <4> [357.789532] intel_engines_init+0x1d8/0x980 [i915] <4> [357.789772] intel_gt_init+0x175/0x450 [i915] <4> [357.790014] i915_gem_init+0x113/0x340 [i915] <4> [357.790281] i915_driver_probe+0x847/0xed0 [i915] <4> [357.790504] i915_pci_probe+0xe6/0x220 [i915] ... CI sonuçları geçmişinin daha yakından incelenmesi, hatanın özellikle şu birkaç IGT testine bağımlı olduğunu ortaya çıkarmıştır: - igt@api_intel_allocator@fork-simple-stress-signal, - igt@api_intel_allocator@two-level-inception-interruptible, - igt@gem_linear_blits@interruptible, - igt@prime_mmap_coherency@ioctl-errors, Bu testler sorunu gizlice tetiklemekte ve sorun ilk sürücü ayırma denemesinde ortaya çıkmaktadır. Yukarıdaki tüm testler, sinyallerle aktif olarak kesilen işlemler gerçekleştirmektedir. Daha fazla hata ayıklama işlemi, kapsamın DRM_IOCTL_I915_GEM_EXECBUFFER2 ve özellikle ring gönderimine özgü olan ring_context_alloc() fonksiyonuna indirgenmesini sağlamıştır. Başarılı olduğunda bu fonksiyonun veya execlist ya da GuC gönderim karşılıklarının, her GEM bağlam motoru için yalnızca bir kez çağrılması ve ardından fonksiyonun tekrar çağrılmasını önleyen bir bayrağın kaldırılması beklenir. Fonksiyonun kendi dahili hatalarını geri alması beklendiğinden, bir hata döndürdükten sonra güvenli bir şekilde bir kez daha çağrılabilir. Ring gönderimi durumunda, fonksiyon önce motorun eski zaman çizelgesi için bir referans alır ve ardından bir VMA ayırır. Eğer VMA ayırma işlemi başarısız olursa (örneğin içeriden çağrılan i915_vma_instance() bir sinyalle kesildiğinde), ring_context_alloc() başarısız olur ve zaman çizelgesi referansı tutulmuş halde kalır. Bir sonraki I915_GEM_EXECBUFFER2 IOCTL işleminde, zaman çizelgesine başka bir referans alınır ve başarılı tamamlanmada yalnızca bu sonuncu referans serbest bırakılır. Sonuç olarak, temelindeki motor durum sayfası VMA nesnesiyle birlikte eski zaman çizelgesi hala tutulur ve sürücü ayrıldığında serbest bırakılmaz. Bağlam motorunun VMA'sı başarıyla ayırıldıktan sonra eski zaman çizelgesini alın. v2: Diğer gönderim yöntemleri hakkında bir not eklenmiştir (Krzysztof Karas): Hem execlists hem de GuC gönderimi, benzer bir sorundan ari görünen lrc_alloc() fonksiyonunu kullanmaktadır. (commit cc43422b3cc79eacff4c5a8ba0d224688ca9dd4f adresinden cherry pick yapılmıştır)
Nasıl düzeltilir
- linux linux_kernel5.4.296, 5.10.240, 5.15.187, 6.1.144, 6.6.97, 6.12.37, 6.15.6 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.4 ≤ v < 5.4.296, 5.5 ≤ v < 5.10.240, 5.11 ≤ v < 5.15.187, 5.16 ≤ v < 6.1.144, 6.2 ≤ v < 6.6.97, 6.7 ≤ v < 6.12.37, 6.13 ≤ v < 6.15.6, 6.16 | 5.4.296, 5.10.240, 5.15.187, 6.1.144, 6.6.97, 6.12.37, 6.15.6 |
| debian debian_linux | 11.0 | — |
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.