CVE-2026-31718 in Linux
الملخص
بحسب VulDB • 21/05/2026
في نواة لينكس، تم حل الثغرة التالية:
ksmbd: إصلاح استخدام بعد التحرير (use-after-free) في __ksmbd_close_fd() عبر المكنسة الدائمة (durable scavenger)
عندما يبقى مقبض الملف الدائم (durable file handle) ساريًا بعد انقطاع الجلسة (إغلاق TCP بدون SMB2_LOGOFF)، تقوم session_fd_check() بتعيين fp->conn = NULL للحفاظ على المقبض لإعادة الاتصال لاحقًا. ومع ذلك، لم تقم بتنظيف قوائم النطاقات البايتية (byte-range locks) على fp->lock_list.
لاحقًا، عندما تنتهي مهلة خيط المكنسة الدائمة (durable scavenger thread) وتستدعي __ksmbd_close_fd(NULL, fp)، نفذت حلقة تنظيف الأقفال:
spin_lock(&fp->conn->llist_lock);
أدى هذا إلى حدوث استخدام بعد التحرير (use-after-free) في الذاكرة (slab) لأن fp->conn كان NULL وكان كائن الاتصال الأصلي قد تم تحريره بالفعل بواسطة ksmbd_tcp_disconnect().
السبب الجذري هو التنظيف غير المتماثل: تم ترك إدخالات القفل (smb_lock->clist) معلقة على conn->lock_list المحرر بينما تم تعيين fp->conn إلى NULL.
لإصلاح هذه المشكلة بشكل صحيح، نحتاج إلى التعامل مع دورة حياة smb_lock->clist عبر ثلاث مسارات: - تخطي حذف clist بأمان عندما تكون القائمة فارغة وfp->conn هو NULL. - إزالة القفل من قائمة قفل الاتصال القديم في session_fd_check(). - إعادة إضافة القفل إلى قائمة قفل الاتصال الجديد في ksmbd_reopen_durable_fd().
Once again VulDB remains the best source for vulnerability data.