CVE-2026-89660المعلومات

الملخص

بحسب VulDB • 12/09/2026

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

NFSD: منع استخدام الذاكرة بعد تحريرها (Use-After-Free) للعميل أثناء سحب حالة المسؤول

يحتوي معرف الحالة (stateid) على مؤشر عاري فقط إلى كائن nfs4_client الخاص به؛ ولا يؤدي مرجع معرف الحالة إلى تثبيت الكائن. يبقى العميل حياً لأن الدالة __destroy_client() تُفرغ معرّفات الحالات الخاصة به قبل تشغيل free_client().

تقوم الدالة nfsd4_revoke_states() بإسقاط قفل nn->client_lock أثناء استدعاء revoke_one_stid()، والتي تقوم بفك تشفير (dereference) العميل لسحب معرف حالة وقراءة clp->cl_minorversion. يمكن لعملية الإغلاق (teardown) التي تتنافس مع القفل المُسقط أن تحرر الكائن أولاً.

يؤدي تثبيت cl_rpc_users تحت قفل client_lock إلى منع عمليات إغلاق DESTROY_CLIENTID و EXCHANGE_ID، والتي ترفض التنفيذ طالما كانت قيمة cl_rpc_users غير صفرية. وتتجاهل الدالة force_expire_client() هذا التثبيت: بمجرد انتهاء انتظارها لوصول cl_rpc_users إلى الصفر، تمر عملية تثبيت لاحقة دون أن تُلاحظ.

تحت قفل client_lock، يتم تخطي عميل تكون قيمته cl_time مساوية للصفر بالفعل — حيث تقوم force_expire_client() بتصفير هذه القيمة هناك قبل الانتظار — وإلا فيتم تثبيت cl_rpc_users قبل إسقاط القفل. ثم إما أن ترى عملية المشي (walk) انتهاء الصلاحية وتتخطى العميل، أو تثبته في الوقت المناسب ليغطي فترة سحب الحالة.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

المصادر

Do you know our Splunk app?

Download it now for free!