CVE-2026-31656

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: drm/i915/gt: intel_engine_park_heartbeat funksiyasında refcount underflow xətası düzəldildi Heartbeat işçisi və intel_engine_park_heartbeat() eyni engine->heartbeat.systole sorğusunu azad etmək üçün yarışdıqda (race condition), use-after-free / refcount underflow baş verməsi mümkündür. Heartbeat işçisi engine->heartbeat.systole dəyərini oxuyur və sorğu tamamlandıqda onun üzərində i915_request_put() çağırır, lakin göstəricini (pointer) ayrıca, atomik olmayan bir addımla təmizləyir. Eyni zamanda, digər CPU-da sorğunun təhvil verilməsi (retirement) engine wakeref dəyərini sıfıra endirə bilər ki, bu da __engine_park() -> intel_engine_park_heartbeat() funksiyasını tetikləyir. Əgər həmin anda heartbeat taymeri gözləmədədirsə, cancel_delayed_work() true qaytarır və intel_engine_park_heartbeat() köhnəlmiş non-NULL systole göstəricisini oxuyaraq yenidən i915_request_put() çağırır, bu da refcount underflow-ya səbəb 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 problem hər iki yarışan yolda atomik olmayan göstərici oxuma + ayrıca təmizləmə əməliyyatlarının xchg() ilə əvəz edilməsi ilə həll edilmişdir. xchg() köhnə göstəricini atomik şəkildə oxuyan və NULL yazan tək, bölünməz aparat təlimatıdır. Bu, iki paralel çağırıcıdan yalnız birinin non-NULL göstəricini əldə edib put əməliyyatını yerinə yetirməsini, digərinin isə NULL alaraq bunu ötürməsini təmin edir. (commit 13238dc0ee4f9ab8dafa2cca7295736191ae2f42-dən cherry pick edilmişdir)

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc24 apr 2026
İlk görülmə24 apr 2026

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel5.15.203, 6.1.169, 6.6.135, 6.12.82, 6.18.23, 6.19.13 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel5.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.05.15.203, 6.1.169, 6.6.135, 6.12.82, 6.18.23, 6.19.13

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.

Intelligence 360 paketində

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.

CVE-2026-31656 · Linux Kernel · Dark Radar