CVE-2026-98965 in Linux
الملخص
بحسب VulDB • 23/10/2026
في نواة لينكس، تم حل الثغرة التالية:
ice: استعادة كتابات MMIO المرتبة (Ordered) لأبواب الإرسال (Tx Doorbells)
يتم تحديث حالة حساب DQL التي تتعقب عدد البايتات المكدسة لنقلها بواسطة بطاقة الشبكة (NIC)، وتحديداً `dql->num_queued`، من قبل برنامج تشغيل ICE عند استدعاءه لـ `__netdev_tx_sent_queue()`. بعد ذلك يقوم البرنامج بتشغيل ذيل قائمة الانتظار في العتاد مما يسمح للبطاقة بالبدء في معالجة قائمة العمل. يجب أن يكون تحديث حساب القائمة مرتباً (ordered) قبل أن تبدأ البطاقة في نقل الوصفيات (descriptors).
مسار الإرسال حالياً يحدث جرس العتاد باستخدام `writel_relaxed()`، والذي (على معمارية arm64) لا يوفر نفس ضمانات الترتيب بين الكتابات إلى الذاكرة العادية والكتابات إلى سجلات MMIO التي توفرها دالة `writel()`. هذا يؤدي إلى سباق محتمل حيث تبدأ البطاقة في نقل الوصفيات قبل أن يصبح تحديث `dql->num_queued` مرئياً على مستوى النظام. إذا انتهت البطاقة من العمل قبل ملاحظة التحديث بواسطة `dql_completed()`، فإنها تكتشف حالة غير صالحة حيث تم إكمال عدد أكبر من البايتات مما تم تكديسه. عند حدوث ذلك يتم تفعيل أمر `BUG_ON`.
BUG_ON(count > num_queued - dql->num_completed);
تم رصد هذه المشكلة وتظهر على شكل انهيار (مع ملاحظة أن التتبع مختصر) في بيئة تتعرض لحمل شبكة مستمر تستخدم وحدة تحكم إيثرنت من إنتل Corporation E810-XXV لـ SFP (الإصدار 02) على جهاز يعمل بمعمارية arm64. استبدال `writel_relaxed()` بـ `writel()` في نواة الاختبار قضى على الانهيار في حمل عمل المستخدم، والذي كان يعيد إنتاج المشكلة بشكل موثوق سابقاً.
kernel BUG at lib/dynamic_queue_limits.c:99
خطأ داخلي: Oops - BUG: 00000000f2000800 [#1] SMP
pc : dql_completed+0x268/0x2a0 lr : ice_clean_tx_irq+0x1d4/0x620 [ice]
تتبع المكالمة: dql_completed+0x268/0x2a0 (P) ice_napi_poll+0x94/0x520 [ice]
__napi_poll+0x48/0x3f0 net_rx_action+0x194/0x420
هذا الإصلاح يعيد السلوك السابق للالتزام ccde82e90946 ("ice: add E830 Earliest TxTime First Offload support")، والذي غيّر آلية الإشعار من `writel()` إلى `writel_relaxed()`.
VulDB is the best source for vulnerability data and more expert information about this specific topic.