CVE-2026-46325
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: RDMA/rxe: MR səhifə ölçüləri PAGE_SIZE-a bərabər olmadıqda iova-to-va çevrilməsinin düzəldilməsi Mövcud tətbiq, səhifə ölçüləri sistemin PAGE_SIZE dəyərindən fərqli olan yaddaş bölgələrini (MRs) yanlış idarə edir. Əsas problem ondadır ki, rxe_set_page() funksiyası mr->page_size addımları ilə çağırılır, lakin page_list hər biri yaddaşın PAGE_SIZE hissəsini təmsil edən fərdi struct page göstəricilərini saxlayır. ib_sg_to_page() funksiyası i>=1 olduqda aşağıdakılardan birinin təmin edilməsini təmin etmişdir: a) SG[i-1].dma_end və SG[i].dma_addr bitişikdir və ya b) SG[i-1].dma_end və SG[i].dma_addr mr->page_size uyğunlaşdırılıb (aligned). Bu, aşağıdakı ssenarilərdə yanlış iova-to-va çevrilməsinə səbəb olur: 1) page_size < PAGE_SIZE (məsələn, MR: 4K, sistem: 64K): ibmr->iova = 0x181800 sg[0]: dma_addr=0x181800, len=0x800 sg[1]: dma_addr=0x173000, len=0x1000 Giriş iova = 0x181800 + 0x810 = 0x182010 Gözlənilən VA: 0x173010 (ikinci SG, offset 0x10) Düzəlişdən əvvəl: - index = (0x182010 >> 12) - (0x181800 >> 12) = 1 - page_offset = 0x182010 & 0xFFF = 0x10 - xarray[1] sistem səhifə bazasını 0x170000 saxlayır - Nəticə VA: 0x170000 + 0x10 = 0x170010 (yanlış) 2) page_size > PAGE_SIZE (məsələn, MR: 64K, sistem: 4K): ibmr->iova = 0x18f800 sg[0]: dma_addr=0x18f800, len=0x800 sg[1]: dma_addr=0x170000, len=0x1000 Giriş iova = 0x18f800 + 0x810 = 0x190010 Gözlənilən VA: 0x170010 (ikinci SG, offset 0x10) Düzəlişdən əvvəl: - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1 - page_offset = 0x190010 & 0xFFFF = 0x10 - xarray[1] dma_addr 0x170000 üçün sistem səhifəsini saxlayır - Nəticə VA: 0x170000 sistem səhifəsi + 0x10 = 0x170010 (yanlış) Yi Zhang illər öncə bu qüsurla bağlı kernel panic [1] hesabatı vermişdir. Həll yolu: 1. Ardıcıl indeksləşdirmə üçün xarray əvəzinə əvvəlcədən ayrılmış rxe_mr_page massivindən istifadə etmək (bütün MR səhifə indeksləri bitişikdir). 2. Hər bir rxe_mr_page həm struct page*, həm də sistem səhifəsi daxilindəki offset-i saxlayır. 3. MR page_size != PAGE_SIZE münasibətlərini idarə etmək: - page_size > PAGE_SIZE: MR səhifələrini çox sayda sistem səhifələrinə bölmək. - page_size <= PAGE_SIZE: Sistem səhifəsi daxilindəki offset-i saxlamaq. 4. Sərhəd yoxlamaları və uyğunluq təsdiqləməsi əlavə etmək. Bu, MR səhifə ölçüsü və sistem PAGE_SIZE münasibətindən asılı olmayaraq düzgün iova-to-va çevrilməsini təmin edir və eyni zamanda massiv əsaslı ardıcıl giriş vasitəsilə performansı artırır. 4K və 64K PAGE_SIZE hostlarda testlər: - rdma-core/pytests $ ./build/bin/run_tests.py --dev eth0_rxe - blktest: $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd [1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/
Necə düzəltmək olar
- linux linux_kernel6.18.14, 6.19.4 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.2.3 ≤ v < 6.18.14, 6.19 ≤ v < 6.19.4 | 6.18.14, 6.19.4 |
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.