CVE-2026-31479
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: drm/xe: remap prev/next izləməsini həmişə saxla 3D iş yükü zamanı istifadəçi aşağıdakı xətanın baş verdiyini bildirir: [ 413.361679] WARNING: drivers/gpu/drm/xe/xe_vm.c:1217 at vm_bind_ioctl_ops_unwind+0x1e2/0x2e0 [xe], CPU#7: vkd3d_queue/9925 [ 413.361944] CPU: 7 UID: 1000 PID: 9925 Comm: vkd3d_queue Kdump: loaded Not tainted 7.0.0-070000rc3-generic #202603090038 PREEMPT(lazy) [ 413.361949] RIP: 0010:vm_bind_ioctl_ops_unwind+0x1e2/0x2e0 [xe] [ 413.362074] RSP: 0018:ffffd4c25c3df930 EFLAGS: 00010282 [ 413.362077] RAX: 0000000000000000 RBX: ffff8f3ee817ed10 RCX: 0000000000000000 [ 413.362078] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 [ 413.362079] RBP: ffffd4c25c3df980 R08: 0000000000000000 R09: 0000000000000000 [ 413.362081] R10: 0000000000000000 R11: 0000000000000000 R12: ffff8f41fbf99380 [ 413.362082] R13: ffff8f3ee817e968 R14: 00000000ffffffef R15: ffff8f43d00bd380 [ 413.362083] FS: 00000001040ff6c0(0000) GS:ffff8f4696d89000(0000) knlGS:00000000330b0000 [ 413.362085] CS: 0010 DS: 002b ES: 002b CR0: 0000000080050033 [ 413.362086] CR2: 00007ddfc4747000 CR3: 00000002e6262005 CR4: 0000000000f72ef0 [ 413.362088] PKRU: 55555554 [ 413.362089] Call Trace: [ 413.362092] <TASK> [ 413.362096] xe_vm_bind_ioctl+0xa9a/0xc60 [xe] Bu, ops unwind üçün yenidən daxil etdiyimiz vma-nın ya etibarsız olduğunu, ya da vm-ə artıq daxil edilmiş nəsə ilə üst-üstə düşdüyünü göstərir. Bu bir yenidən daxiletmə olduğu üçün etibarsız olmamalıdır, çünki əvvəllər işləmişdir. Beləliklə, ehtimal ki, problem vma-nı yerləşdirmək istədiyimiz yerdə artıq nəsənin olmasıdır. Buna əsasən, vma-nın ortasında rebind kimi bir əməliyyat apardığımız və xəritələnmiş sonlardan biri və ya hər ikisi artıq uyğun olduğu halda, biz həmin vma-ların rebind prosesini ötürürük və next/prev dəyişənlərini NULL təyin edirik. Həmçinin, sonların unmap edilməməsi üçün orijinal unmap va diapazonunu tənzimləyirik. Lakin, unwind yolunu tetiklədikdə, üç va ilə qarşılaşırıq: iki son heç vaxt silinmir və ortadakı orijinal va diapazonu hələ də kiçildilmiş ölçüdə qalır. Bu baş verdikdə, xətaların bir forması digər unwind əməliyyatının həmin diapazonla qarşılıqlı əlaqə qurmalı olduğu halda baş verir ki, bu da bind vektorları ilə mümkündür. Məsələn, orijinal va-nın yerinə nəsə yenidən daxil etməliyiksə. Bu halda va hələ də kiçildilmiş versiya olur, ona görə də onu silib sonra yenidən daxil etdikdə, heç vaxt silinməmiş sonlarla üst-üstə düşə bilər ki, bu da yuxarıdakı kimi xəbərdarlığa səbəb olur və vm-i pis vəziyyətdə qoyur. Bununla bağlı, burada iki şey lazımdır: 1) Ötürmə halları üçün prev/next izləməsini ləğv etməyi dayandırın. Bunun əvəzinə, lazım olduqda skip prev/next yoxlamasına güvənin. Beləliklə, unwind yolunda indi hər iki son düzgün şəkildə silinir. 2) Unwind yolunda unmap va kiçiltməsini geri qaytarın. İki son artıq silindiyi üçün, yenidən daxiletmədən əvvəl unmap va yenidən orijinal ölçüsünə genişlənməlidir. v2: - Commit mesajındakı izahı, təxminlərə deyil, bu problemi tetikləyən real IGT-yə əsaslanaraq yeniləyin. - Həmçinin, ötürmə halı üçün unmap kiçiltməsini geri qaytarın. İki son artıq silindiyi üçün, orijinal unmap va diapazonu yenidən orijinal diapazona genişlənməlidir. v3: - Köhnə start/range məlumatlarını ayrıca izləyin. vma_size/start() funksiyaları va məlumatlarından birbaşa istifadə edir. (commit aec6969f75afbf4e01fd5fb5850ed3e9c27043ac-dən cherry pick edilmişdir)
Necə düzəltmək olar
- linux linux_kernel6.12.80, 6.18.21, 6.19.11 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.8.1 ≤ v < 6.12.80, 6.13 ≤ v < 6.18.21, 6.19 ≤ v < 6.19.11, 6.8, 7.0 | 6.12.80, 6.18.21, 6.19.11 |
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.