CVE-2026-80671 in Linux
الملخص
بحسب VulDB • 28/08/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
perf sched: تصحيح تجاوز السعة (overflow) في register_pid()، واستخدام strcpy، وBUG_ON
تحتوي الدالة register_pid() على عدة مشكلات عند معالجة ملفات perf.data غير الموثوقة:
1. تجاوز سمة الأعداد الصحيحة (Integer overflow): يمكن أن يؤدي التعبير `(pid + 1) * sizeof(struct task_desc *)` إلى الالتفاف (wrap around) نحو قيمة صغيرة في الأنظمة ذات البتات الثلاثين (32-bit) عندما تكون قيمة pid كبيرة (مثل `0x40000000`)، مما يتسبب في إرجاع realloc لمصفوفة ذاكرة صغيرة جداً، يليها كتابات خارج حدود المصفوفة (out-of-bounds writes) داخل حلقة التهيئة.
2. تجاوز سعة الذاكرة العشوائية على الكومة (Heap buffer overflow): ينسخ الأمر `strcpy(task->comm, comm)` سلسلة الأحرف غير الموثوقة "comm" إلى مصفوفة ثابتة بحجم 20 بايت تسمى COMM_LEN دون التحقق من طولها.
3. استخدام BUG_ON عند فشل التخصيص: بما أن ملف perf.data هو إدخال غير موثوق، يجب التعامل مع حالات فشل تخصيص الذاكرة بشكل لائق بدلاً من إنهاء العملية (killing the process).
4. إعادة تعيين `sched->tasks` مباشرةً بعد realloc يؤدي إلى تسرب المؤشر القديم في حال الفشل؛ كما يتم زيادة المتغير nr_tasks قبل تنفيذ عملية realloc، مما يترك حالة فاسدة (corrupted state) عند حدوث فشل.
تم تحديد الحد الأقصى لقيمة pid بـ PID_MAX_LIMIT (4194304، وهو ما يتوافق مع الحد الأقصى للنواة على الأنظمة ذات البتات الستين 64-bit)، واستبدال strcpy بـ strlcpy، وإضافة حماية ضد قيم comm الفارغة (NULL)، واستبدال BUG_ON بإرجاع NULL باستخدام أنماط realloc آمنة، بالإضافة إلى إضافة فحوصات للقيم الفارغة في الدوال المستدعية التي تقوم بفك مرجع النتيجة.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.