CVE-2023-52910
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: iommu/iova: alloc iova daşma probleminin həlli __alloc_and_insert_iova_range funksiyasında retry_pfn dəyişəninin daşması ilə bağlı problem mövcuddur. iovad->anchor.pfn_hi dəyəri ~0UL olduqda və iovad->cached_node = iovad->anchor olduqda, curr_iova->pfn_hi + 1 ifadəsi daşmaya səbəb olur. Nəticədə, əgər təkrar cəhd (retry) məntiqi icra edilərsə, low_pfn 0 olaraq yenilənir və sonra new_pfn < low_pfn şərti false qaytararaq ayırmanın uğurlu olduğunu göstərir. Bu problem aşağıdakı iki vəziyyətdə baş verir: 1. İlk iova ölçüsü domen ölçüsünü aşdıqda. iova domeni başladılarkən iovad->cached_node olaraq iovad->anchor təyin edilir. Məsələn, iova domeninin ölçüsü 10M, start_pfn 0x1_F000_0000 və ilk dəfə ayrılan iova ölçüsü 11M olduqda. Aşağıda loq məlumatları verilmişdir, burada new->pfn_lo iovad->cached_node-dan kiçikdir. Nümunə loq aşağıdakı kimidir: [ 223.798112][T1705487] sh: [name:iova&]__alloc_and_insert_iova_range start_pfn:0x1f0000,retry_pfn:0x0,size:0xb00,limit_pfn:0x1f0a00 [ 223.799590][T1705487] sh: [name:iova&]__alloc_and_insert_iova_range success start_pfn:0x1f0000,new->pfn_lo:0x1efe00,new->pfn_hi:0x1f08ff 2. iova domenində ən böyük iova->pfn_lo dəyərinə malik düyün silindikdə, iovad->cached_node dəyəri iovad->anchor ilə yenilənir və daha sonra ayrılan iova ölçüsü domendə ayıra biləcəyiniz maksimum iova ölçüsünü aşır. Daşma problemini həll etmək üçün retry_pfn-in limit_pfn-dən kiçik olduğu yoxlandıqdan sonra retry_pfn+1 çağırılır.
Necə düzəltmək olar
- linux linux_kernel5.15.89, 6.1.7 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.11 ≤ v < 5.15.89, 5.16 ≤ v < 6.1.7, 6.2 | 5.15.89, 6.1.7 |
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.