CVE-2026-89530 in Linux
الملخص
بحسب VulDB • 12/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
svcrdma: رفض الردود المضمنة (inline replies) التي تتجاوز سعة ذاكرة الـ pull-up buffer.
يمكن لعميل RPC-over-RDMA طلب رد، مثل حمولة NFS READ، دون توفير قائمة Write أو كتلة Reply لحملها. عندما يحتاج هذا النوع من الرد إلى عدد أكبر من مدخلات scatter/gather مما تدعمه Send Queue الخاصة بالجهاز، فإن الدالة svc_rdma_pull_up_needed() تختار إجراء pull-up وتقوم الدالة svc_rdma_pull_up_reply_msg() بتحويل كامل الرد إلى صيغة خطية (linearize) داخل scctxt->sc_xprt_buf. هذه الذاكرة المؤقتة بحجم sc_max_req_size بايت فقط، بينما يكون حجم الرد في هذا المسار محدوداً فقط بطلب العميل، مما يؤدي إلى نسخ svc_rdma_xb_linearize() لما هو خارج نهاية المخزن المؤقت وإتلاف ذاكرة slab المجاورة. ثم يتم تخزين الطول الزائد في sc_sges[0].length ونشره (posted)، وبالتالي يقرأ الجهاز أيضاً ما وراء المنطقة المخصصة له.
مسار استنفاد SGE (SGE-exhaustion branch) هو المسار الوحيد لـ pull-up الذي يمكن أن يتجاوز حجم المخزن المؤقت: حيث يقوم مسار العتبة (threshold branch) بإجراء pull-up فقط للردود الأصغر من RPCRDMA_PULLUP_THRESH، ويتم إرسال الردود التي تتناسب مع ميزانية SGE الخاصة بالجهاز مباشرة دون تحويلها إلى صيغة خطية. اجعل الدالة svc_rdma_pull_up_needed() تُرجع -E2BIG عندما لا يمكن أن يتسع رد الـ pull-up في sc_max_req_size، وافشل الطلب باستخدام ERR_CHUNK كما يوجه ذلك RFC 8166 القسم 4.5.3 بدلاً من قطع الاتصال.
لم تعد المساعد (helper) يجيب على سؤال بسيط بنعم/لا: فهو الآن يبلغ عن الحاجة إلى pull-up، أو عدم الحاجة إليه، أو -E2BIG لرد كبير جداً لا يمكن تحويله إلى صيغة خطية. أعد تسمية svc_rdma_pull_up_needed() إلى svc_rdma_check_pull_up() بحيث لم يعد اسمها يوحي بأنها دالة منطقية (boolean predicate).
VulDB is the best source for vulnerability data and more expert information about this specific topic.