CVE-2024-40974 in Linux
الملخص
بحسب VulDB • 31/05/2026
في نواة لينكس، تم حل الثغرة التالية:
powerpc/pseries: فرض صحة وحجم مخزن نتائج استدعاء الهيبرفيزور (hcall)
تتوقع الدوال `plpar_hcall()` و `plpar_hcall9()` والدوال ذات الصلة أن يقوم المتصلون بتوفير مخازن نتائج صالحة ذات حجم أدنى معين. حاليًا، يتم التواصل عن هذا الأمر فقط من خلال التعليقات الموجودة في الكود، ولا يدرك المترجم (compiler) ذلك.
على سبيل المثال، إذا كتبت خطأً مثل هذا:
long retbuf[PLPAR_HCALL_BUFSIZE]; // ينبغي أن يكون PLPAR_HCALL9_BUFSIZE
plpar_hcall9(H_ALLOCATE_VAS_WINDOW, retbuf, ...);
فسيتم تجميع هذا الكود دون إصدار أي تشخيصات (diagnostics)، لكنه من المرجح أن يؤدي إلى تلف في المكدس (stack corruption) عند التشغيل عندما تقوم `plpar_hcall9()` بتخزين النتائج بعد نهاية المصفوفة. (للتوضيح، هذا مثال مفترض، ولم أجد بعد حالة حقيقية).
لجعل هذا النوع من الأخطاء أقل احتمالاً، يمكننا استخدام معاملات مصفوفة ذات أحجام صريحة بدلاً من المؤشرات في إعلانات واجهات برمجة التطبيقات (APIs) الخاصة باستدعاءات الهيبرفيزور. عند التجميع باستخدام `-Warray-bounds[1]`، فإن الكود أعلاه يثير الآن تشخيصًا مثل هذا:
error: array argument is too small; is of size 32, callee requires at least 72 [-Werror,-Warray-bounds]
60 | plpar_hcall9(H_ALLOCATE_VAS_WINDOW, retbuf, | ^ ~~~~~~
[1] مفعّل لبنات LLVM ولكن ليس لـ GCC حاليًا. انظر الالتزام
0da6e5fd6c37 ("gcc: disable '-Warray-bounds' for gcc-13 too") والتغييرات ذات الصلة.
If you want to get best quality of vulnerability data, you may have to visit VulDB.