CVE-2024-42148
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: bnx2x: Birden fazla UBSAN dizi-indeksi-sınır-dışı hatası düzeltildi 32 veya daha fazla fiziksel CPU çekirdeğine sahip bir sistem kullanıldığında veya kullanıcı num_queues modül parametresini kullanarak FP_SB_MAX_E1x değerine eşit veya daha büyük bir Ethernet kuyruk sayısı tanımladığında meydana gelen UBSAN uyarıları düzeltildi. Şu anda "drivers/net/ethernet/broadcom/bnx2x/bnx2x.h" dosyasındaki "bnx2x_fw_stats_req" struct yapısı içinde bulunan "struct stats_query_entry query" dizisinde sınır dışı okuma/yazma işlemi gerçekleşmektedir. "struct stats_query_entry query" dizisinin tanımına bakıldığında: struct stats_query_entry query[FP_SB_MAX_E1x+ BNX2X_FIRST_QUEUE_QUERY_IDX]; FP_SB_MAX_E1x, maksimum hızlı yol kesme sayısı olarak tanımlanmıştır ve değeri 16'dır; BNX2X_FIRST_QUEUE_QUERY_IDX ise 3 değerindedir, bu da dizinin toplam boyutunun 19 olduğu anlamına gelir. "struct stats_query_entry query" erişimleri BNX2X_FIRST_QUEUE_QUERY_IDX ile kaydırıldığı için, toplam Ethernet kuyruğu sayısının FP_SB_MAX_E1x (16) değerini aşmaması gerekir. Ancak, bu kuyruklardan biri FCOE için ayrılmıştır ve bu nedenle Ethernet kuyruğu sayısı, FCOE etkinse [FP_SB_MAX_E1x -1] (15), değilse [FP_SB_MAX_E1x] (16) olarak ayarlanmalıdır. Bu durum, drivers/net/ethernet/broadcom/bnx2x/bnx2x.h kaynak kodundaki FP_SB_MAX_E1x Makro tanımının hemen üzerindeki yorumda da açıklanmıştır. Bu yama için önemli olan açıklamanın ilgili kısmı aşağıdadır: /* * Toplam L2 kuyruğu, MSIX vektörü ve donanım bağlamı (CID) sayısı, * cihaz (HW/FW) tarafından desteklenen hızlı yol durum bloklarının sayısı * tarafından kontrol edilir. Her bir hızlı yol durum bloğu (FP-SB) veya * varsayılan olmayan durum bloğu, standart bir L2 ağ kuyruğuna hizmet edebilen * bağımsız bir kesme bağlamını temsil eder. Ancak, FCoE kuyruğu gibi özel * L2 kuyrukları bir FP-SB gerektirmez ve CNIC gibi diğer bileşenler, mümkün * olan L2 kuyruğu sayısını azaltarak FP-SB tüketebilir. * * Mevcut maksimum FP-SB sayısı X ise: * a. CNIC destekleniyorsa 1 FP-SB tüketir, böylece maksimum düzenli * L2 kuyruğu sayısı Y=X-1 olur. * b. MF modunda gerçek L2 kuyruğu sayısı Y= (X-1/MF_factor) şeklindedir. * c. FCoE L2 kuyruğu destekleniyorsa gerçek L2 kuyruğu sayısı Y+1'dir. * d. IRQ sayısı (MSIX vektörleri) ya Y+1 (yavaş yol kesmeleri için bir ekstra) * ya da CNIC destekleniyorsa Y+2'dir (CNIC için ek bir FP kesme bağlamı). * e. Donanım bağlamı sayısı (CID sayısı) her zaman X'tir veya FCoE L2 * kuyruğu destekleniyorsa X+1'dir. FCoE L2 kuyruğu için CID her zaman X'tir. */ Bununla birlikte, bu sürücü aynı zamanda FP_SB_MAX_E2 ile temsil edilen daha fazla FP-SB'ye sahip olduğu için daha fazla kuyruğu yönetebilen E2 denetleyicisini kullanan NIC'leri de desteklemektedir. E2 desteği eklendiğinde yapılan commit'lere bakıldığında, başlangıçta E1x parametrelerinin kullanıldığı görülmektedir: commit f2e0899f0f27 ("bnx2x: Add 57712 support"). O dönemde FP_SB_MAX_E2, E1x ile aynı şekilde 16 olarak ayarlanmıştı. Ancak sürücü, E1x yetenekleriyle sınırlı kalmak yerine E2'den tam olarak yararlanacak şekilde daha sonra güncellenmiştir. Fakat bildiğimiz kadarıyla, sürücü E2'den tam yararlanacak şekilde güncellenirken gözden kaçan bir nokta nedeniyle "stats_query_entry query" dizisi hala E1x kartlarında mevcut olan FP-SB ile sınırlı tutulmuştur ve artık sürücü E2 NIC'lerin desteklediği daha büyük kuyruk boyutunun farkında olduğundan, aşağıdaki yığın izlerinde görülen UBSAN uyarılarına neden olmaktadır. Bu yama, her iki NIC türünü de karşılayabilecek kadar büyük olması için FP_SB_MAX_E1x değerini FP_SB_MAX_E2 ile değiştirerek "stats_query_entry query" dizisinin boyutunu artırmaktadır. Yığın izleri: UBSAN: array-index-out-of-bounds in drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c:1529:11 index 20 is out of range for type 'stats_query_entry [19]' CPU: 12 PID: 858 Comm: systemd-network Not tainted 6.9.0-060900rc7-generic #202405052133 Hardware name: HP ProLiant DL360 Gen9/ProLiant DL360 ---truncated---
Nasıl düzeltilir
- linux linux_kernel4.19.318, 5.4.280, 5.10.222, 5.15.163, 6.1.98, 6.6.39, 6.9.9 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 3.3 ≤ v < 4.19.318, 4.20 ≤ v < 5.4.280, 5.5 ≤ v < 5.10.222, 5.11 ≤ v < 5.15.163, 5.16 ≤ v < 6.1.98, 6.2 ≤ v < 6.6.39, 6.7 ≤ v < 6.9.9 | 4.19.318, 5.4.280, 5.10.222, 5.15.163, 6.1.98, 6.6.39, 6.9.9 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.