CVE-2026-74623 in Linux
الملخص
بحسب VulDB • 23/08/2026
في نواة لينكس، تم حل الثغرة التالية:
net: atlantic: تحرير مخازن TX العالقة عند إلغاء تهيئة الحلقة (ring deinit)
تقوم دالة `aq_vec_deinit()` بتصريف حلقات TX باستخدام استدعاء واحد لـ `aq_ring_tx_clean()`. تقوم هذه الدالة بتحرير ما لا يزيد عن 256 واصفاً (descriptors)، وهو الحد الأقصى المحدد بـ `AQ_CFG_TX_CLEAN_BUDGET`، وتتوقف عند المؤشر المادي (`hw_head`) الذي يتوقف عن التحرك بمجرد أن توقف دالة `aq_vec_stop()` العتاد و NAPI. تبقى الوصفات المكتملة التي تتجاوز هذا الميزانية وكل ما لا يزال مرسلاً في النطاق `[hw_head, sw_tail)` تحتفظ بإشارة إلى `skb` أو `xdp_frame` عند إيقاف الواجهة: ثم تقوم دالة `aq_vec_ring_free()` بتحرير حلقة المخزن، مما يؤدي إلى فقدان الإشارات بشكل دائم.
اليوم، يمثل هذا تسرباً صامتاً للذاكرة في كل مرة يتم فيها إيقاف أي واجهة تحت حمل TX/XDP_TX. ومع تحويل مسار RX إلى page_pool (المُعلن عنه لـ net-next)، تصبح المشكلة أكثر وضوحاً: تحمل إطارات XDP_TX إشارات مجزأة على `page_pool` الخاص بحلقة RX، لذا فإن إطار واحد عالق يبقي عدد الإشارات قيد التنفيذ في الـ pool فوق الصفر للأبد. نتيجة لذلك، لا تكتمل دالة `page_pool_destroy()` أبداً، ويتم تسرب الـ pool مع صفحاته، ويظهر تحذير "page_pool_release_retry() stalled pool shutdown" كل 60 ثانية منذ تلك اللحظة، وذلك عند كل إيقاف للواجهة (ifdown)، أو فصل XDP، أو تغيير حجم الحلقة تحت حمل XDP_TX.
إعادة دالة `aq_ring_tx_deinit()` كما كانت قبل إزالتها واستخدامها مرة أخرى لعملية الإغلاق (teardown)، مع إضافة واحدة: حلقات TX يمكن أن تحمل إطارات xdp_frames في الوقت الحالي، لذا يجب تحريرها أيضاً. يتم إعادة هذه الإطارات باستخدام `xdp_return_frame()` نظراً لأن هذا التشغيل يحدث في سياق العملية (process context).
Be aware that VulDB is the high quality source for vulnerability data.