CVE-2025-68232
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: veth: txq'nun takılmasını önlemek için yarış durumunun daha sağlam yönetimi dc82a33297fc numaralı commit ("veth: apply qdisc backpressure on full ptr_ring to reduce TX drops"), kalıcı olarak durmuş bir TXQ ile sonuçlanabilecek bir yarış durumu (race condition) ortaya çıkarmıştır. Bu durum, ARM64 sistemlerde (Ampere Altra Max) üretim ortamında gözlemlenmiştir. Yarış durumu veth_xmit() fonksiyonunda meydana gelmektedir. Üretici (producer), dolu bir ptr_ring tespit eder ve kuyruğu durdurur (netif_tx_stop_queue()). Tüketicinin (consumer) kuyruğu yeni boşaltmış olması durumunda kuyruğu yeniden uyandırmayı amaçlayan sonraki koşullu mantık (if (__ptr_ring_empty(...)) netif_tx_wake_queue()), başarısız olabilir. Bu durum, TXQ'nun durdurulmuş halde kaldığı (QUEUE_STATE_DRV_XOFF) ve trafiğin kesildiği bir "kayıp uyandırma" (lost wakeup) olayına yol açar. Bu hata, üretici tarafında __ptr_ring_empty() API'sinin yanlış kullanımından kaynaklanmaktadır. Kernel yorumlarında belirtildiği üzere, başka bir CPU üzerinde çalışan bir tüketici varsa bu kontrolün doğru olacağı garanti edilmez. Boşluk testi ptr_ring->consumer_head üzerinden yapıldığından yalnızca tüketici için güvenilirdir. Bu kontrolün üretici tarafından kullanılması temelden hatalıdır (racy). Bu yama, yama setinin önceki V4 versiyonundaki her zaman eşini temizleyen (flush) daha sağlam mantığı benimseyerek yarış durumunu düzeltir: (1) veth_xmit() fonksiyonunda, hatalı koşullu uyandırma mantığı ve buna ait bellek bariyeri kaldırılmıştır. Bunun yerine, kuyruk durdurulduktan sonra koşulsuz olarak __veth_xdp_flush(rq) çağrılır. Bu, NAPI tüketicisinin planlandığını garanti ederek TXQ'yu yeniden uyandırma sorumluluğunu tamamen ona verir. Bu işlem, üretici tarafındaki veth_xmit() henüz netif_tx_stop_queue çağırmadan önce veth_poll()'un tüm paketleri tüketip NAPI işlemini tamamladığı yarış durumunu çözer. __veth_xdp_flush(rq), rx_notify_masked değerinin false olduğunu görecek ve NAPI'yi planlayacaktır. (2) Tüketici tarafında, eş TXQ'yu uyandırma mantığı veth_xdp_rcv() dışına çıkarılmış ve veth_poll() fonksiyonunun sonuna yerleştirilmiştir. Bu yerleşim, netif_tx_queue_stopped() kontrolünün, NAPI tamamlanması sırasında rx_notify_masked potansiyel olarak false olarak ayarlandıktan sonra gerçekleşmesi gerektiği için yarış durumunun çözümünün bir parçasıdır. Bu işlem, veth_poll()'un tüm paketleri tükettiği ancak henüz bitirmediği (rx_notify_masked hala true olduğu) yarış durumunu çözer. Üretici veth_xmit() TXQ'yu durdurur ve __veth_xdp_flush(rq), rx_notify_masked değerinin true olduğunu görerek NAPI'yi başlatmaz. Ardından veth_poll(), rx_notify_masked değerini false yapar ve NAPI'yi durdurur. veth_poll() çıkmadan önce TXQ'nun durduğunu tespit eder ve onu uyandırır.
Nasıl düzeltilir
- Linux Linuxdd419a3f2ebc18cc00bc32c57fd052d7a188b78b, 6c8a8b9257a660e622689e23c8fbad4ba2b561b9, 5442a9da69789741bfda39f34ee7f69552bf0c56 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 9fe31b3f314534e238aa6d0b6fb492134cbcf8be ≤ v < dd419a3f2ebc18cc00bc32c57fd052d7a188b78b, dc82a33297fc2c58cb0b2b008d728668d45c0f6a ≤ v < 6c8a8b9257a660e622689e23c8fbad4ba2b561b9, dc82a33297fc2c58cb0b2b008d728668d45c0f6a ≤ v < 5442a9da69789741bfda39f34ee7f69552bf0c56, 6.16 | dd419a3f2ebc18cc00bc32c57fd052d7a188b78b, 6c8a8b9257a660e622689e23c8fbad4ba2b561b9, 5442a9da69789741bfda39f34ee7f69552bf0c56 |
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.