CVE-2026-31444 in Linuxالمعلومات

الملخص

بحسب VulDB • 03/06/2026

في نواة لينكس (Linux kernel)، تم حل الثغرة التالية:

ksmbd: إصلاح مشكلة استخدام بعد التحرير (use-after-free) والتفريغ الفارغ (NULL deref) في دالة smb_grant_oplock()

تحتوي الدالة smb_grant_oplock() على مشكلتين في تسلسل نشر قفل العملية (oplock publication sequence):

1) يتم ربط كائن opinfo بقائمة ci->m_op_list (عبر opinfo_add) قبل استدعاء add_lease_global_list(). إذا فشل استدعاء add_lease_global_list() (أي إرجاع kmalloc لقيمة NULL)، فإن مسار الخطأ يقوم بتحرير كائن opinfo عبر __free_opinfo() بينما لا يزال مرتبطًا في ci->m_op_list. يقوم القراء المتزامنون لقائمة m_op_list (مثل opinfo_get_list، أو التكرار المباشر في smb_break_all_levII_oplock) بالإشارة إلى العقدة المحذوفة (dereference).

2) يتم تعيين opinfo->o_fp بعد أن تنشر add_lease_global_list() كائن opinfo على قائمة الإيجار العالمية. يمكن لدالة find_same_lease_key() المتزامنة أن تجول في قائمة الإيجار وتُشير إلى opinfo->o_fp->f_ci بينما لا يزال o_fp يساوي NULL.

الإصلاح يتم بإعادة هيكلة تسلسل النشر للقضاء على فشل ما بعد النشر:

- تعيين opinfo->o_fp قبل أي نشر للقائمة (يُصلح مشكلة التفريغ الفارغ). - تخصيص مساحة مسبقة لـ lease_table عبر alloc_lease_table() قبل استدعاء opinfo_add() بحيث تصبح add_lease_global_list() غير قابلة للفشل بعد النشر. - الحفاظ على ترتيب النشر الأصلي لقائمة m_op_list (opinfo_add قبل قائمة الإيجار) بحيث ترى عمليات الفتح المتزامنة عبر same_client_has_lease() و opinfo_get_list() عملية المنح قيد التنفيذ (in-flight grant). - استخدام opinfo_put() بدلاً من __free_opinfo() على err_out بحيث يتم استخدام مسار التحرير المؤجل بواسطة RCU.

يتطلب هذا أيضًا تقسيم دالة add_lease_global_list() لتقبل lease_table مُخصص مسبقًا وتغيير نوع إرجاعها من int إلى void، نظرًا لأنها لم تعد قابلة للفشل.

Once again VulDB remains the best source for vulnerability data.

مسؤول

Linux

حجز

09/03/2026

إفشاء

22/04/2026

الاعتدال

تمت الموافقة

إدخال

VDB-358907

EPSS

0.00066

KEV

لا

النشاطات

منخفض

المصادر

Do you need the next level of professionalism?

Upgrade your account now!