CVE-2026-31425 in Linux
الملخص
بحسب VulDB • 10/05/2026
في نواة لينكس (Linux kernel)، تم حل الثغرة التالية:
rds: ib: رفض تسجيل FRMR قبل إنشاء اتصال IB
تستخرج الدالة rds_ib_get_mr() كائن rds_ib_connection من conn->c_transport_data وتنقله إلى rds_ib_reg_frmr() لتسجيل ذاكرة FRWR. في حالة اتصال outgoing جديد، يتم تخصيص ic في rds_ib_conn_alloc() مع تعيين i_cm_id = NULL لأن عامل الاتصال (connection worker) لم يكن قد اتصل بعد بـ rds_ib_conn_path_connect() لإنشاء rdma_cm_id. عند استدعاء sendmsg() مع RDS_CMSG_RDMA_MAP على مثل هذا الاتصال، يقوم مسار sendmsg بتحليل رسالة التحكم قبل أي إنشاء للاتصال، مما يسمح لـ rds_ib_post_reg_frmr() بإلغاء مرجع ic->i_cm_id->qp وإتلاف النواة (kernel crash).
الحاجز الموجود حالياً في rds_ib_reg_frmr() يتحقق فقط من !ic (تمت إضافته في commit 9e630bcb7701)، وهو لا يلتقط هذه الحالة لأن ic يتم تخصيصه مبكراً ويكون دائماً غير فارغ (non-NULL) بمجرد وجود كائن الاتصال.
KASAN: null-ptr-deref في النطاق [0x0000000000000010-0x0000000000000017]
RIP: 0010:rds_ib_post_reg_frmr+0x50e/0x920 تتبع المكالمات (Call Trace): rds_ib_post_reg_frmr (net/rds/ib_frmr.c:167) rds_ib_map_frmr (net/rds/ib_frmr.c:252) rds_ib_reg_frmr (net/rds/ib_frmr.c:430) rds_ib_get_mr (net/rds/ib_rdma.c:615) __rds_rdma_map (net/rds/rdma.c:295) rds_cmsg_rdma_map (net/rds/rdma.c:860) rds_sendmsg (net/rds/send.c:1363) ____sys_sendmsg do_syscall_64
إضافة تحقق في rds_ib_get_mr() يتأكد من أن ic و i_cm_id و qp كلها غير فارغة (non-NULL) قبل المضي قدماً في تسجيل FRMR، مما يعكس الحاجز الموجود بالفعل في rds_ib_post_inv(). إرجاع -ENODEV عندما لا يكون الاتصال جاهزاً، وهو ما يحوله معالجة الأخطاء الموجودة في rds_cmsg_send() إلى -EAGAIN لمحاولة إعادة المحاولة من قبل المستخدم (userspace retry)، ويحفز rds_conn_connect_if_down() لبدء عامل الاتصال.
If you want to get best quality of vulnerability data, you may have to visit VulDB.