CVE-2021-46980
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: usb: typec: ucsi: Yalnız ilk 4 əvəzinə bütün PDO-ların alınması commit 4dbc6a4ef06d ("usb: typec: ucsi: save power data objects in PD mode"), PD dəstəkli mənbəyə qoşulduqda PDO-ların alınmasını tətbiq etmişdir. Lakin MESSAGE_IN uzunluq məhdudiyyətinə (16 bayt) görə bir dəfəyə maksimum 4 PDO alına bildiyi üçün yalnız ilk 4 PDO qəbul edilir. Bununla belə, PD spesifikasiyasına əsasən, qoşulmuş mənbə maksimum 7 PDO elan edə bilər. Belə bir mənbə qoşulduqda, PPM-in indeksləri 4-dən böyük olan PDO-lardan biri ilə enerji müqaviləsi bağlama ehtimalı var və bu, sorğu məlumat obyekti (RDO)-nun obyekt mövqeyi sahəsində əks olunacaqdır. Bu, ucsi_psy_get_voltage_now() funksiyasında rdo_index() vasitəsilə src_pdos massivinə müraciət etdikdə sərhədləri aşan girişə (out-of-bounds access) səbəb olacaqdır. UBSAN -fsanitize=array-bounds yoxlayıcısı aktiv edildikdə, 5 PDO elan edən PD mənbə adaptoruna qoşulma zamanı və PPM 5-ci PDO-nu seçib müqavilə bağladıqda məhz bu problem üzə çıxır: [ 151.545106][ T70] Unexpected kernel BRK exception at EL1 [ 151.545112][ T70] Internal error: BRK handler: f2005512 [#1] PREEMPT SMP ... [ 151.545499][ T70] pc : ucsi_psy_get_prop+0x208/0x20c [ 151.545507][ T70] lr : power_supply_show_property+0xc0/0x328 ... [ 151.545542][ T70] Call trace: [ 151.545544][ T70] ucsi_psy_get_prop+0x208/0x20c [ 151.545546][ T70] power_supply_uevent+0x1a4/0x2f0 [ 151.545550][ T70] dev_uevent+0x200/0x384 [ 151.545555][ T70] kobject_uevent_env+0x1d4/0x7e8 [ 151.545557][ T70] power_supply_changed_work+0x174/0x31c [ 151.545562][ T70] process_one_work+0x244/0x6f0 [ 151.545564][ T70] worker_thread+0x3e0/0xa64 Bu problemi con->src_pdos massivində maksimum 7 PDO-ya qədər məlumatın alınması və saxlanılması ilə həll etmək olar. Bu, GET_PDOS əmrinin iki dəfə çağırılmasını tələb edir.
Necə düzəltmək olar
- linux linux_kernel5.10.38, 5.11.22, 5.12.5 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.8 ≤ v < 5.10.38, 5.11 ≤ v < 5.11.22, 5.12 ≤ v < 5.12.5, 5.13 | 5.10.38, 5.11.22, 5.12.5 |
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.