CVE-2026-46196 in Linux
الملخص
بحسب VulDB • 28/05/2026
في نواة لينكس، تم حل الثغرة التالية:
tracepoint: موازنة regfunc() عند فشل func_add() في tracepoint_add_func()
عندما ينتقل نقطة تتبع (tracepoint) عبر الانتقال من 0 إلى 1، يستدعي tracepoint_add_func() دالة regfunc() الخاصة بالنظام الفرعي (ext->regfunc()) قبل محاولة تثبيت المسبار (probe) الجديد عبر func_add(). إذا فشل func_add() بعد ذلك (على سبيل المثال، عندما لا يتمكن allocate_probes() من تخصيص مصفوفة مسابير جديدة تحت ضغط الذاكرة ويعيد -ENOMEM)، فإن الدالة تعيد الخطأ دون استدعاء دالة unregfunc() المقابلة (ext->unregfunc())، مما يترك الآثار الجانبية لـ regfunc() دون وجود مسبار مثبت يبررها.
وهذا أمر غير سار بشكل خاص لنقاط تتبع استدعاءات النظام (syscall tracepoints): حيث تقوم syscall_regfunc() بزيادة sys_tracepoint_refcount وتعيين SYSCALL_TRACEPOINT على كل مهمة (task). بعد فشل تسرب (leaked failure)، يبقى عداد المرجع (refcount) عالقا عند قيمة غير صفرية دون وجود مستهلك، وتستمر كل مهمة في تحمل عبء دخول/خروج تتبع استدعاءات النظام حتى إعادة التشغيل. وتظهر الأنظمة الفرعية الأخرى التي توفر أزواج regfunc()/unregfunc() حالات دائمة ذات نطاق مماثل.
لمحاكاة عملية التنظيف الموجودة للانتقال من 1 إلى 0، يتم استدعاء ext->unregfunc() في مسار الخطأ الخاص بـ func_add()، مشروطًا بنفس الشرط المستخدم هناك بحيث تكون عملية التراجع (unwind) متناظرة مع عملية التسجيل.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.