- Son 7 gün
CVE-2026-98965
Linux çekirdeğinde ICE sürücüsünde Tx doorbell yazmalarının sıralaması bozulması, çökmeye yol açıyor
- Yayımlandı
- Güncellendi
- 24 Eki 2026
- Açık yaşı
- 5 gün
- Kaydı açan
- Linux
ÖzetTürkçe
Linux çekirdeğinde, Intel E810 ağ denetleyicilerini kullanan ICE sürücüsünde bir sorun giderilmiştir. Sürücü, NIC'in iletmek üzere kuyruğa aldığı bayt sayısını takip eden DQL muhasebe durumunu (dql->num_queued) __netdev_tx_sent_queue çağrısıyla günceller ve ardından donanım kuyruk kuyruğunun sonunu (tail) güncelleyerek NIC'in iş kuyruğunu işlemeye başlamasını sağlar. Kuyruk muhasebesi güncellemesinin, NIC'in tanımlayıcıları iletmeye başlamasından önce gerçekleşmesi gerekir. Ancak iletim yolu donanım doorbell'ini writel_relaxed ile günceller; bu fonksiyon arm64 üzerinde normal bellek yazmaları ile MMIO register yazmaları arasında writel kadar sıralama garantisi sunmaz. Bu durum, NIC'in dql->num_queued güncellemesi genel olarak görünür olmadan iletime başlayabileceği bir yarış koşulu yaratır. NIC, güncelleme dql_completed tarafından görülmeden işi bitirirse, kuyruğa alınandan daha fazla baytın tamamlandığı geçersiz bir durum oluşur ve BUG_ON tetiklenerek çekirdek çöker. Bu sorun, arm64 makinede E810-XXV for SFP (rev 02) denetleyicisi kullanan, yoğun ağ yükü altındaki bir ortamda gözlemlenmiştir. Test çekirdeğinde writel_relaxed yerine writel kullanıldığında çökme ortadan kalkmıştır. Düzeltme, bildirim mekanizmasını writel'den writel_relaxed'e değiştiren ccde82e90946 ("ice: add E830 Earliest TxTime First Offload support") commit'inden önceki davranışı geri getirir. Etkilenen sürüm: Linux 6.18 (6.18.57 ve 7.2.11 sürümleri etkilenmez). CVSS 3.1 skoru: 7.5 (YÜKSEK), vektör: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. Saldırı, hizmet dışı bırakma (DoS) ile sonuçlanabilir.
Kaynaktaki açıklama (İngilizce)
In the Linux kernel, the following vulnerability has been resolved:
ice: Restore Ordered MMIO Writes for Tx Doorbells
The DQL accounting state which tracks the number of bytes queued for the
NIC to transmit, namely dql->num_queued, is updated by the ICE driver
when it invokes __netdev_tx_sent_queue(). Subsequently the driver
updates the hardware queue tail allowing the NIC to begin processing the
work queue. The queue accounting update should be ordered before the NIC
begins transmitting descriptors.
The transmit path currently updates the hardware doorbell using
writel_relaxed(), which (on arm64) does not provide the same ordering
guarantees between writes to normal memory and writes to MMIO registers
that writel() does. This introduces a potential race where the NIC
begins transmitting descriptors before the dql->num_queued update is
globally visible. If the NIC finishes before the update is observed by
dql_completed(), it detects an invalid state where more bytes have been
completed than have been queued. When this happens the following BUG_ON
is triggered.
BUG_ON(count > num_queued - dql->num_completed);
This has been observed and manifests as the following crash (note that
the trace has been trimmed) in an environment with sustained network
load that uses an Intel Corporation Ethernet Controller E810-XXV for SFP
(rev 02) on an arm64 machine. Replacing writel_relaxed() with writel()
in a test kernel eliminated the crash in the user's workload, which
previously reproduced the issue reliably.
kernel BUG at lib/dynamic_queue_limits.c:99
Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
pc : dql_completed+0x268/0x2a0
lr : ice_clean_tx_irq+0x1d4/0x620 [ice]
Call trace:
dql_completed+0x268/0x2a0 (P)
ice_napi_poll+0x94/0x520 [ice]
__napi_poll+0x48/0x3f0
net_rx_action+0x194/0x420
This restores the behaviour prior to commit ccde82e90946 ("ice: add E830
Earliest TxTime First Offload support"), which changed the notification
mechanism from writel() to writel_relaxed().
Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.
Etkilenen sürümler1 yazılım
| Yazılım | Etkilenen | Düzeltildiği sürüm |
|---|---|---|
| Linux | 6.18 | – |
| < 6.18 Etkilenmiyor | – | |
| ≥ 6.18.57 Etkilenmiyor | – | |
| ≥ 7.2.11 Etkilenmiyor | – |
Kaynaklar5 kaynak
Kayıt geçmişi
- Yayımlandı
İlgili açıklar
Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.