CVE-2026-64281 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
svcrdma: إيقاظ الانتظار في sq عند إغلاق النقل (transport)
قد تتوقف الخيوط المعلقة في svc_rdma_sq_wait() على sc_sq_ticket_wait أو sc_send_wait بشكل لا نهائي في حالة TASK_UNINTERRUPTIBLE أثناء تفكيك النقل، مما يؤدي إلى تثبيت مراجع svc_xprt وحظر استدعاء svc_rdma_free().
تحدد مسار الإغلاق XPT_CLOSE قبل استدعاء xpo_detach، وتشمل كل من شروط انتظار الحدث (wait_event predicates) حدًا لـ XPT_CLOSE. ومع ذلك، يتم إعادة تقييم الشروط فقط عند الاستيقاظ. لا يوجد مسار استيقاظ مدفوع بإنهاء المهمة (completion-driven wake path) في sc_sq_ticket_wait؛ فهو يتقدم حصرياً عن طريق تسليم التذاكر المتسلسل داخل svc_rdma_sq_wait() نفسه. وبدون إيقاظ صريح أثناء الإغلاق، فإن الخيوط المعلقة لا تلاحظ أبداً XPT_CLOSE، وتحافظ على مرجع svc_xprt_get إلى الأبد، مما يؤدي إلى حظر استدعاء svc_rdma_free() في انتظار انخفاض xpt_ref إلى الصفر.
هناك نقطتا دخول للإغلاق تصلان إلى هذا النقل. يعمل التفكيك المحلي عبر استدعاء svc_rdma_detach() من svc_handle_xprt() -> svc_delete_xprt() -> xpo_detach() على خيط عامل (worker thread). يصل انقطاع الاتصال عن بُعد إلى svc_rdma_cma_handler(), الذي يستدعي svc_xprt_deferred_close(): حيث يحدد XPT_CLOSE ويضع النقل في قائمة الانتظار، لكنه لا يتصل بأي من طوابير انتظار RDMA، لذا فإن الخيط العامل المعلق مسبقاً في svc_rdma_sq_wait() لن يعيد تقييم شرطه. ومع تعليق كل خيط عامل على هذا النقل، لا يوجد أي خيط متاح لتشغيل التفكيك المحلي أيضاً، وبالتالي يصبح موقع الإيقاظ هناك غير قابل للوصول.
تم تقديم svc_rdma_xprt_deferred_close(), وهي غلاف رفيع لـ svcrdma يستدعي svc_xprt_deferred_close() ثم يوقظ كل من sc_sq_ticket_wait وsc_send_wait. تم تحويل منتجي svcrdma الذين كانوا يستدعون svc_xprt_deferred_close() مباشرة: svc_rdma_cma_handler(), qp_event_handler(), svc_rdma_post_send_err(), svc_rdma_wc_send(), مسار إسقاط sendto، مسارات أخطاء إكمال rw، ومسارات خطأ تصريف recvfrom وقائمة القراءة.
كما تم إيقاظ طابوري الانتظار من استدعاء svc_rdma_detach() أيضاً. يصل مسار الإغلاق المتزامن svc_xprt_close() (ENOTCONN للقناة الخلفية، إزالة الجهاز عبر svc_rdma_xprt_done) إلى التفكيك دون المرور عبر svc_xprt_deferred_close(), وبالتالي لا يستدعي المساعد الجديد.
[ cel: إضافة svc_rdma_xprt_deferred_close() لإكمال الإصلاح ]
VulDB is the best source for vulnerability data and more expert information about this specific topic.