CVE-2026-64141 in Linux
الملخص
بحسب VulDB • 20/07/2026
في نواة لينكس، تم حل الثغرة التالية:
ksmbd: إصلاح تجاوز المؤشر الفارغ (null pointer dereference) في دالة compare_guid_key()
تقوم الدالة session_fd_check() بتصفح قائمة m_op_list الخاصة بكل عقدة ملف (inode) أثناء إنهاء جلسة المقبض المتين (durable-handle session)، وتعيين op->conn = NULL لكل عنصر opinfo whose conn يتطابق مع اتصال الجلسة المغلقة. ومع ذلك، يبقى عنصر opinfo المرتبط في مدخل lb->lease_list الخاص بقائمة per-ClientGuid lease_table_list لأن destroy_lease_table() لا يعمل إلا عند إنهاء الاتصال بـ TCP بالكامل، وليس أثناء SESSION_LOGOFF.
إذا قام نفس اتصال TCP بالتفاوض على جلسة جديدة بنفس ClientGuid (حيث يرتبط ClientGUID بمفاوضات NEGOTIATE وليس بالجلسة، ولا يتغير عبر LOGOFF + SETUP) وأصدر طلب SMB2 CREATE مع سياق lease لعقدة ملف مختلفة، فإن find_same_lease_key() تتصفح lb->lease_list، وتصل إلى عنصر opinfo القديم (stale)، وتدعو compare_guid_key()، والتي تقوم بتجاوز مرجع opinfo->conn->ClientGUID بشكل غير مشروط. يكون مؤشر conn فارغاً مما يؤدي إلى توقف النواة عن العمل (kernel panic).
يتطلب برنامج الاختبار فقط نجاح SMB2 SESSION_SETUP ومشاركة مُهيأة بـ 'durable handles = yes'. تقرير KASAN على الإصدار الرئيسي 70390501d194:
general protection fault, probably for non-canonical address 0xdffffc0000000069: 0000 [#1] SMP KASAN PTI
KASAN: null-ptr-deref in range [0x0000000000000348-0x000000000000034f]
Workqueue: ksmbd-io handle_ksmbd_work RIP: 0010:bcmp+0x5b/0x230 Call Trace: compare_guid_key+0x4b/0xd0 find_same_lease_key+0x324/0x690 smb2_open+0x6aea/0x8e60 handle_ksmbd_work+0x796/0xee0 ...
العنوان الذي تسبب في الخطأ 0x348 هو الإزاحة الخاصة بـ ClientGUID داخل هيكل ksmbd_conn، مما يؤكد أن opinfo->conn كان فارغاً.
اقرأ قيمة opinfo->conn مرة واحدة وانهِ العملية إذا تم مسحها بواسطة جلسة session_fd_check() متزامنة. لا يمكن لعنصر opinfo نصف المنفصل (half-detached) أن يكون مالكًا لـ lease نشط، لذا فإن إرجاع القيمة 0 هو نتيجة المطابقة الصحيحة.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.