CVE-2026-90015
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: xhci: bir neçə halqa seqmentini əhatə edən TD-lərdə itmiş bounce buferlərinin düzəldilməsi Bir TD endpoint-in wMaxPacketSize dəyəri ilə uyğunlaşmayan məlumatlara malik link TRB-yə çatdıqda, xhci_align_td() funksiyası uyğunlaşdırıla bilməyən son hissəni həmin link TRB-ni saxlayan halqa seqmentinin bounce buferi vasitəsilə mərhələləşdirir. Sonradan xhci_unmap_td_bounce_buffer() onu unmap edir və IN transferləri üçün məlumatları URB-nin buferinə geri kopyalayır. Növbəyə alma yolu, bir TD-nin heç vaxt ikidən çox halqa seqmentini əhatə etməyəcəyi fərziyyəsinə əsaslanaraq, bounce edilmiş seqmenti td->bounce_seg-də qeyd edir. Bu fərziyyə doğru deyil: üç və ya daha çox seqmenti əhatə edəcək qədər böyük olan bir TD bir neçə link TRB-ni keçir və hər birində bounce edilə bilər. Yalnız sonuncusu td->bounce_seg-də qalır, buna görə də əvvəlki hər bir bounce buferi nə geri kopyalanır, nə də DMA unmap edilir. URB hələ də actual_length tələb olunan uzunluğa bərabər və xətasız şəkildə tamamlanır, beləliklə, transfer uğurlu görünür, lakin təyinat buferində wMaxPacketSize ölçüsündə boşluq səssizcə öz əvvəlki məzmununu saxlayır. Həmçinin, hər itirilmiş bounce üçün bir DMA mapping sızıntısı baş verir. Kifayət qədər böyük və fraqmentasiya olunmuş istənilən bulk transferi buna səbəb ola bilər. Bu, 512 baytlıq hash blokları olan dm-verity hədəfini dəstəkləyən xHCI arxasındakı USB kütləvi yaddaş cihazı ilə aşkar edilmişdir ki, burada köhnəlmiş məlumatlar səssizcə istehlak edilmir, əksinə aşkarlanır. Cihaz SuperSpeed kimi tanınır, ona görə də wMaxPacketSize 1024-dür, halbuki dm-bufio hər hash bloku üçün bir 512 baytlıq bio göndərir. verity_prefetch_io() blok təbəqəsinin yüzlərlə onları hər biri 512 bayt olan 512 scatterlist girişindən ibarət tək bir sorğuya birləşdirməsini təmin edir. Halqa seqmenti başına 256 TRB olduqda, belə bir TD üç seqmenti əhatə edir və hər bir seqment sərhədi 512-nin tək mislinə düşür, yəni wMaxPacketSize ilə uyğunlaşmır. Daha sonra dm-bufio köhnəlmiş məlumatları saxlayan hash blokunu keşləyir və dm-verity metadata blokunun korlandığını elan edir: device-mapper: verity: 8:2: metadata block 10850 is corrupted Bunu qemu altında işlədən reproducer https://github.com/baloo/xhci-verity ünvanında mövcuddur. Bounce vəziyyəti (bounce_buf, bounce_dma, bounce_len, bounce_offs) artıq halqa seqmentində yerləşir, buna görə də izləmək üçün əlavə bir şey yoxdur. Son bounce edilmiş seqmenti td->bounce_seg-də qeyd etməyə davam edin və tamamlandıqda, td->start_seg-dən başlayaraq ona qədər seqmentləri gəzin və hələ də gözləyən bounce-u olan hər bir seqmenti unmap edin. td->end_seg əvəzinə td->bounce_seg-də dayanmaq vacibdir: bounce, TD-nin həmin seqmentin link TRB-sini keçərək davam etdiyini bildirir, buna görə də bounce_seg həmişə ciddi şəkildə end_seg-dən əvvəl gəlir və sonrakı bir TD artıq end_seg-də başlamış və orada bounce edilmiş ola bilər. Bu qədər uzağa getmək kənar bounce buferini bu URB-yə kopyalayacaq və onu iki dəfə unmap edəcəkdir. Bu həmçinin, əgər TD bütün halqanı dolanarsa və end_seg == start_seg olarsa, prosesin düzgünlüyünü qoruyub saxlayır. [mn: Ehtimalolunmaz sonsuz for dövrünün qarşısını almaq üçün ring->num_segs yoxlaması əlavə edildi.]
Necə düzəltmək olar
- Linux Linuxc8124b28f12dbdd126118e63d0ebf8093a01fb81, e04d5304a248e5d2a7f4faa87541644bdd320cfb, a1629dfb011446d02905778f6df19f14c5f4f3b3, 43239fc6dfb62c50ae1b9c0e82bac0f8cd2e285c, 3c9a2b5a4f1183696f02ac280ced1d34afb409b1, efaab8938fb92979be6df359f7d1a43fb7e4717d, 7236bbd2cb7d9fc0eda896bbd34790341e2a4377, ff44dfb03a293bf30e31f98772a1dd316a6071d1 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < c8124b28f12dbdd126118e63d0ebf8093a01fb81, f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < e04d5304a248e5d2a7f4faa87541644bdd320cfb, f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < a1629dfb011446d02905778f6df19f14c5f4f3b3, f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < 43239fc6dfb62c50ae1b9c0e82bac0f8cd2e285c, f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < 3c9a2b5a4f1183696f02ac280ced1d34afb409b1, f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < efaab8938fb92979be6df359f7d1a43fb7e4717d, f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < 7236bbd2cb7d9fc0eda896bbd34790341e2a4377, f9c589e142d04b8a19eb382162f804d17102b5ed ≤ v < ff44dfb03a293bf30e31f98772a1dd316a6071d1, 4.8 | c8124b28f12dbdd126118e63d0ebf8093a01fb81, e04d5304a248e5d2a7f4faa87541644bdd320cfb, a1629dfb011446d02905778f6df19f14c5f4f3b3, 43239fc6dfb62c50ae1b9c0e82bac0f8cd2e285c, 3c9a2b5a4f1183696f02ac280ced1d34afb409b1, efaab8938fb92979be6df359f7d1a43fb7e4717d, 7236bbd2cb7d9fc0eda896bbd34790341e2a4377, ff44dfb03a293bf30e31f98772a1dd316a6071d1 |
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.