CVE-2026-19185
Təsvir
drivers/i3c/i3c_handlers.c faylındakı i3c_do_ccc() üçün sistem çağırışı yoxlayıcısı xarici struct i3c_ccc_payload-u, yayım ccc.data buferini və targets.payloads[] massivini təsdiqləyirdi, lakin həmin massiv elementlərinin göstərdiyi hədəf üzrə məlumat buferlərini təsdiqləmirdi. Hər bir struct i3c_ccc_target_payload öz məlumat göstəricisinə (pointer) və data_len dəyərinə malikdir və yük z_impl_i3c_do_ccc() funksiyasına və oradan kontroller drayverinə ötürülməzdən əvvəl bunların heç biri K_SYSCALL_MEMORY() vasitəsilə yoxlanılmamışdı. Yoxlayıcı həmçinin şablon (snapshot) əvəzinə çağıran tərəfin canlı strukturu ilə işləyirdi, buna görə də təsdiqlənmiş sahələr yoxlama ilə drayverin istifadəsi arasında ikinci bir istifadəçi axını (thread) tərəfindən dəyişdirilə bilərdi — bu, mesaj massivini əvvəlcə kopyalayan oxşar z_vrfy_i3c_transfer() funksiyasından fərqli idi. Qüsur yalnız drivers/i3c/i3c_handlers.c faylının kompilyasiya edildiyi CONFIG_USERSPACE quruluşlarında mövcuddur. I3C kontroller cihaz obyektinə giriş hüququ verilmiş imtiyazsız istifadəçi rejimi axını — tətbiqin istifadəçi axınına I3C periferiya qurğuları ilə danışmağa icazə verməsinin adi yolu — hədəf yükünün məlumat göstəricisi ixtiyari nüvə (kernel) ünvanını göstərən birbaşa CCC göndərə bilər. Kontroller drayverləri istiqaməti müəyyən etmək üçün rnw-dən istifadə edərək həmin göstəricini birbaşa dereference edir (məsələn, drivers/i3c/i3c_mcux.c, drivers/i3c/i3c_cdns.c, drivers/i3c/i3c_stm32.c, drivers/i3c/i3c_npcx.c). Beləliklə, oxuma CCC-si nüvə rejimidəki drayverin şin vasitəsilə qəbul edilmiş baytları hücum edənin seçdiyi nüvə ünvanına, hücum edənin seçdiyi uzunluqda yazmasına səbəb olur, yazma CCC-si isə nüvə yaddaşını I3C şininə ötürür. Nəticədə, sərhədləri aşan nüvə yazılması və nüvə yaddaşının ifşası baş verir, yəni istifadəçi rejimi axınından supervizor imtiyazlarına yüksəlmə baş verir ki, bu da CONFIG_USERSPACE-in təmin etməli olduğu izolyasiyanı pozur. Düzəliş copy_ccc_and_do() funksiyasını təqdim edir; bu funksiya yükün şablonunu çıxarır, hədəf massivini k_usermode_alloc_from_copy() ilə nüvə yaddaşına kopyalayır (num_targets sayını 32-dən azla məhdudlaşdıraraq), rnw-yə uyğun olaraq hər bir hədəf buferini K_SYSCALL_MEMORY() ilə təsdiqləyir və drayver tərəfindən yazılan num_xfer və err sahələrini yenidən çağıran tərəfə kopyalayır.
Necə düzəltmək olar
- zephyrproject zephyr4.5.0 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| zephyrproject zephyr | 3.2.0 ≤ v < 4.5.0 | 4.5.0 |
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.