CVE-2026-31726
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: usb: gadget: uvc: unbind yarışı zamanı NULL göstəricisinin istifadəsi (NULL pointer dereference) düzəldildi b81ac4395bbe ("usb: gadget: uvc: allow for application to cleanly shutdown") commit-i bir neçə növ kernel panic hallarının qarşısını almaq üçün uvc_function_unbind() funksiyasında cəmi 1500ms olan iki mərhələli sinxronizasiya gözləməsi tətbiq etmişdir. Lakin, vaxta əsaslanan bu yanaşma enerji idarəetməsi (PM) keçidləri zamanı kifayət etmir. PM alt sistemi istifadəçi sahəsi proseslərini dondurmağa başladıqda, wait_event_interruptible_timeout() erkən dayandırılır ki, bu da unbind axınına davam etməyə və gadget göstəricisini sıfırlamağa (cdev->gadget = NULL) imkan verir: [ 814.123447][ T947] configfs-gadget.g1 gadget.0: uvc: uvc_function_unbind() [ 814.178583][ T3173] PM: suspend entry (deep) [ 814.192487][ T3173] Freezing user space processes [ 814.197668][ T947] configfs-gadget.g1 gadget.0: uvc: uvc_function_unbind no clean disconnect, wait for release PM alt sistemi suspend prosesini bərpa etdikdə və ya ləğv etdikdə və tapşırıqlar yenidən başladıldıqda, V4L2 release yolu icra olunur və artıq sıfırlanmış gadget göstəricisinə müraciət etməyə çalışaraq kernel panic törədir: [ 814.292597][ C0] PM: pm_system_irq_wakeup: 479 triggered dhdpcie_host_wake [ 814.386727][ T3173] Restarting tasks ... [ 814.403522][ T4558] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000030 [ 814.404021][ T4558] pc : usb_gadget_deactivate+0x14/0xf4 [ 814.404031][ T4558] lr : usb_function_deactivate+0x54/0x94 [ 814.404078][ T4558] Call trace: [ 814.404080][ T4558] usb_gadget_deactivate+0x14/0xf4 [ 814.404083][ T4558] usb_function_deactivate+0x54/0x94 [ 814.404087][ T4558] uvc_function_disconnect+0x1c/0x5c [ 814.404092][ T4558] uvc_v4l2_release+0x44/0xac [ 814.404095][ T4558] v4l2_release+0xcc/0x130 Yarış şərti (race condition) və NULL pointer dereference problemi aşağıdakılarla həll edilmişdir: 1. Vəziyyətin Sinxronizasiyası (bayraq + mutex) struct uvc_device strukturuna 'func_unbound' bayrağı əlavə edildi. Bu, uvc_function_disconnect() funksiyasının sıfırlanmış cdev->gadget göstəricisinə müraciəti təhlükəsiz şəkildə ötürməsinə imkan verir. Alan Stern tərəfindən təklif edildiyi kimi, yaddaşın düzgün sıralanmasını təmin etmək və təlimatların yenidən sıralanmasının və ya spekulyativ yükləmələrin qarşısını almaq üçün bu bayraq yeni bir mutex (uvc->lock) ilə qorunur. Bu mutex həmçinin ardıcıl vəziyyət idarəetməsi üçün 'func_connected' elementini qorumaq üçün də istifadə olunur. 2. Aşkar Sinxronizasiya (tamamlama) uvc_function_unbind() funksiyasını uvc_vdev_release() geri çağırışı (callback) ilə sinxronlaşdırmaq üçün tamamlama (completion) mexanizmindən istifadə edilir. Bu, bütün video cihaz resursları azad edildikdən sonra struct uvc_device strukturunun azad edilməsini təmin edərək Use-After-Free (UAF) probleminin qarşısını alır.
Necə düzəltmək olar
- linux linux_kernel5.10.253, 5.15.203, 6.1.168, 6.6.134, 6.12.81, 6.18.22, 6.19.12 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 | 5.10.117 ≤ v < 5.10.253, 5.15.41 ≤ v < 5.15.203, 5.18 ≤ v < 6.1.168, 6.2 ≤ v < 6.6.134, 6.7 ≤ v < 6.12.81, 6.13 ≤ v < 6.18.22, 6.19 ≤ v < 6.19.12, 7.0 | 5.10.253, 5.15.203, 6.1.168, 6.6.134, 6.12.81, 6.18.22, 6.19.12 |
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.