CVE-2026-31656
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: drm/i915/gt: intel_engine_park_heartbeat fonksiyonundaki refcount underflow hatası düzeltildi Heartbeat worker ve intel_engine_park_heartbeat() fonksiyonunun aynı engine->heartbeat.systole isteğini serbest bırakmak için yarışması durumunda bir serbest bırakıldıktan sonra kullanım (use-after-free) / refcount underflow durumu oluşabilmektedir. Heartbeat worker, engine->heartbeat.systole değerini okur ve istek tamamlandığında üzerinde i915_request_put() çağrısı yapar; ancak işaretçiyi ayrı ve atomik olmayan bir adımda temizler. Eş zamanlı olarak, başka bir CPU üzerindeki bir istek emekliliği (request retirement), engine wakeref değerini sıfıra indirerek __engine_park() -> intel_engine_park_heartbeat() sürecini tetikleyebilir. Eğer o noktada heartbeat zamanlayıcısı beklemedeyse, cancel_delayed_work() true döner ve intel_engine_park_heartbeat() güncel olmayan non-NULL systole işaretçisini okuyarak üzerinde tekrar i915_request_put() çağrısı yapar, bu da bir refcount underflow'a neden olur: ``` <4> [487.221889] Workqueue: i915-unordered engine_retire [i915] <4> [487.222640] RIP: 0010:refcount_warn_saturate+0x68/0xb0 ... <4> [487.222707] Call Trace: <4> [487.222711] <TASK> <4> [487.222716] intel_engine_park_heartbeat.part.0+0x6f/0x80 [i915] <4> [487.223115] intel_engine_park_heartbeat+0x25/0x40 [i915] <4> [487.223566] __engine_park+0xb9/0x650 [i915] <4> [487.223973] ____intel_wakeref_put_last+0x2e/0xb0 [i915] <4> [487.224408] __intel_wakeref_put_last+0x72/0x90 [i915] <4> [487.224797] intel_context_exit_engine+0x7c/0x80 [i915] <4> [487.225238] intel_context_exit+0xf1/0x1b0 [i915] <4> [487.225695] i915_request_retire.part.0+0x1b9/0x530 [i915] <4> [487.226178] i915_request_retire+0x1c/0x40 [i915] <4> [487.226625] engine_retire+0x122/0x180 [i915] <4> [487.227037] process_one_work+0x239/0x760 <4> [487.227060] worker_thread+0x200/0x3f0 <4> [487.227068] ? __pfx_worker_thread+0x10/0x10 <4> [487.227075] kthread+0x10d/0x150 <4> [487.227083] ? __pfx_kthread+0x10/0x10 <4> [487.227092] ret_from_fork+0x3d4/0x480 <4> [487.227099] ? __pfx_kthread+0x10/0x10 <4> [487.227107] ret_from_fork_asm+0x1a/0x30 <4> [487.227141] </TASK> ``` Bu sorun, her iki yarışan yolda atomik olmayan işaretçi okuma ve ayrı temizleme işlemleri xchg() ile değiştirilerek çözülmüştür. xchg(), eski işaretçiyi atomik olarak okuyan ve yerine NULL yazan tek ve bölünemez bir donanım talimatıdır. Bu, eş zamanlı iki çağrıdan yalnızca birinin non-NULL işaretçiyi alıp put işlemini gerçekleştirmesini, diğerinin ise NULL alarak işlemi atlamasını garanti eder. (commit 13238dc0ee4f9ab8dafa2cca7295736191ae2f42 üzerinden cherry pick yapılmıştır)
Nasıl düzeltilir
- linux linux_kernel5.15.203, 6.1.169, 6.6.135, 6.12.82, 6.18.23, 6.19.13 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.5.1 ≤ v < 5.15.203, 5.16 ≤ v < 6.1.169, 6.2 ≤ v < 6.6.135, 6.7 ≤ v < 6.12.82, 6.13 ≤ v < 6.18.23, 6.19 ≤ v < 6.19.13, 5.5, 7.0 | 5.15.203, 6.1.169, 6.6.135, 6.12.82, 6.18.23, 6.19.13 |
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.