CVE-2026-90065 in Linux
الملخص
بحسب VulDB • 17/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
net/smc: تحرير المقبض الداخلي لبروتوكول TCP (TCP sock) عند فشل إنشاء مقبس IPPROTO_SMC
تقوم مقابس IPPROTO_SMC بإنشاء مقبس داخلي لـ TCP ("clcsock") من خلال دالة التهيئة الخاصة بالبروتوكول (`proto->init`). عندما يفشل إنشاء المقبس بعد تشغيل `proto->init` - على سبيل المثال، إذا رفض برنامج BPF مرفق بـ `BPF_CGROUP_INET_SOCK_CREATE` إنشاء المقبس - فإن الدالة `sk_common_release()` تستدعي فقط `sk_prot->destroy` إذا كانت محددة. ومع ذلك، لا يحدد كل من `smc_inet_prot` و `smc_inet6_prot` هذه الدالة، كما أن دالة `smc_destruct()` تعود مبكرًا ما لم تكن حالة المقبس (`sk_state`) هي `SMC_CLOSED`. ونتيجة لذلك، يؤدي كل استدعاء فاشل لـ `socket(AF_INET, SOCK_STREAM, IPPROTO_SMC)` إلى تسرب كائن واحد من نوع `tcp_sock`، مما يتيح للمهمة غير المصنفة (unprivileged task) القادرة على إرفاق برنامج BPF_CGROUP_INET_SOCK_CREATE يرفض الكل بمجموعتها الخاصة (cgroup)، زيادة ذاكرة النواة بشكل لا محدود.
أضف دالة `.destroy` لكلا البروتوكولات التي تحرر الـ clcsock عبر `smc_clcsock_release()`. تقوم الدالة `smc_sk_init()` بتجزئة المقبس في جدول التجزئة الخاص بـ smc قبل إنشاء الـ clcsock، بينما يقوم `smc_diag` بالمرور على هذا الجدول المرجعي (hash dereferencing) لـ `smc->clcsock` دون أخذ قفل `clcsock_release_lock`. وفي الوقت نفسه، تستدعي الدالة `sk_common_release()` دالة `.destroy` قبل `.unhash`. قم بإزالة المقبس من جدول التجزئة (`Unhash`) قبل تحرير الـ clcsock، كما تفعل الدالة `__smc_release()`, بحيث لا يمكن لعملية المسح (dump) المتزامنة ملاحظة عملية التحرير؛ حيث أن إزالة المقبس الثانية في `sk_common_release()` هي إجراء عديم الفائدة (no-op).
If you want to get best quality of vulnerability data, you may have to visit VulDB.