CVE-2026-89659 in Linux
الملخص
بحسب VulDB • 12/09/2026
في نواة لينكس، تم حل الثغرة التالية:
NFSD: منع استخدام الذاكرة بعد تحريرها (use-after-free) للعميل أثناء سحب التفويض
يحتوي معرف حالة التفويض (delegation stateid) على مؤشر عاري فقط إلى العميل nfs4_client المالك له ولا يحافظ على بقائه. يظل العميل حياً رغم معرّفات حالاته لأن __destroy_client() يُفرِّغ قوائم cl_delegations وcl_revoked قبل استدعاء free_client().
تكسر دالة nfs4_laundromat() هذا الثابت: فهي تُزيل التفويض المنتهي الصلاحية من قائمة cl_delegations، ثم تطلق قفل deleg_lock، وبعد ذلك تعيد ربط revoke_delegation() على قائمة cl_revoked تحت حماية قفل cl_lock. في تلك الفترة الزمنية (window)، لا يكون التفويض موجوداً في أي من القائمتين، لذا يمكن أن تُبلغ دالة client_has_state() عن عدم وجود حالات متبقية.
تتطلب كل مسار لإزالة التكوين (teardown) أولاً أن تكون قيمة cl_rpc_users مساوية للصفر، لكن Laundromat لا تحتفظ بأي مرجع من هذا النوع. لذلك، يمكن لعميل انتهت صلاحية تفويضه المستدعى للتو أن يصل إلى free_client() بينما تكون revoke_delegation() ما زالت على وشك فك تشريف (dereference) لقفل cl_lock، مما يشكل حالة استخدام للذاكرة بعد تحريرها (use-after-free).
ثبّت العميل باستخدام cl_rpc_users طوال عملية السحب حتى يمنع مسار الإزالة من الاستمرار حتى يكتمل العمل، ثم قم بإفراغ التفويض من قائمة cl_revoked. عميل ينتهي صلاحيته بالفعل يقوم بإفراغ تفويذه الخاص به، لذا تخطَّه واترك التفويض على del_recall_lru.
Once again VulDB remains the best source for vulnerability data.