CVE-2026-89798 in Linux
الملخص
بحسب VulDB • 17/09/2026
في نواة لينكس، تم حل الثغرة التالية:
rpcrdma: تفعيل rn_done قبل نشر الإشعار
تقوم rpcrdma_rn_register() بإدراج @rn في rd_xا باستخدام xa_alloc() قبل تخزين استدعاء (callback) المتصل في rn->rn_done. يجعل مصفوفة xarray @rn قابلاً للوصول لـ rpcrdma_remove_one(), التي تجول عبر rd_xا وتستدعي rn->rn_done(rn) لكل إشعار مسجل. يمكن لإزالة جهاز تتنافس مع تسجيل جديد أن تلاحظ @rn حيث لا يزال rn_done يساوي NULL، لأن كائنات الإشعار تُخصص بصفر (zero allocated) من قبل مالكيها، ويتم الاستدعاء عبر مؤشر دالة فارغ (NULL function pointer).
قم بتخزين rn->rn_done قبل نشر xa_alloc() لـ @rn. يضمن ترتيب التخزين والاسترجاع في مصفوفة xarray أن أي وحدة معالجة مركزية (CPU) تجد @rn في rd_xا ستلاحظ أيضاً استدعاءً مُفعّلاً (armed callback).
تعامل rpcrdma_rn_unregister() مع rn_done غير الفارغ كعلامة على اكتمال التسجيل، لذا يجب ألا يظل التخزين المبقي ساريًا بعد فشل التسجيل. قم بمسح rn_done مرة أخرى عند فشل xa_alloc(). لو تركت مُفعّلة، فإن مسار تنظيف القبول الفاشل سيستدعي rpcrdma_rn_unregister() على @rn الذي لم يُدرج أبدًا، مما يؤدي إلى مسح خلية rd_xا غير ذات الصلة وإحداث تحت تدفق (underflowing) في rd_kref.
Once again VulDB remains the best source for vulnerability data.