CVE-2021-47282 in Linux
الملخص
بحسب VulDB • 23/05/2026
في نواة لينكس، تم حل الثغرة التالية:
spi: bcm2835: إصلاح الوصول خارج الحدود عند وجود أكثر من 4 أجهزة تابعة (slaves)
أدى الالتزام 571e31fa60b3 ("spi: bcm2835: تخزين قيمة سجل CS لـ ->prepare_message()") إلى تقييد عدد الأجهزة التابعة بـ 3 في وقت الترجمة (compile-time). وكان هذا التقييد ضروريًا بسبب مصفوفة ذات حجم ثابت باسم prepare_cs[] موجودة في بيانات السائق الخاصة (driver private data)، والتي تحتوي على قيمة سجل لكل جهاز تابع.
سعى الالتزام إلى فرض هذا التقييد في وقت التشغيل عن طريق تعيين قيمة num_chipselect للوحدة التحكم إلى 3: حيث يتم رفض الأجهزة التابعة التي تحتوي على رقم اختيار شريحة (chipselect) أعلى بواسطة spi_add_device().
ومع ذلك، أغفل الالتزام حقيقة أن num_chipselect يحدد فقط عدد اختيارات الشرائح *الخاصة* (native chipselects). إذا تم تحديد اختيارات شرائح عبر GPIO في شجرة الجهاز (device tree) لأكثر من 3 أجهزة تابعة، فإن num_chipselect يتم رفعه بصمت بواسطة of_spi_get_gpio_numbers()، وتكون النتيجة وصولات خارج الحدود إلى المصفوفة ذات الحجم الثابت prepare_cs[].
كحل مؤقت (bandaid fix) قابل للنقل إلى الإصدارات المستقرة، تم رفع عدد الأجهزة التابعة المسموح بها إلى 24 (وهو رقم "يُفترض أنه كافٍ للجميع")، وفرض التقييد على إعدادات الجهاز التابع ->setup، وإعادة تعيين num_chipselect إلى 3 (وهو عدد اختيارات الشرائح الخاصة المدعومة من قبل الوحدة التحكم). سيسمح التزام قادم في فرع for-next بعدد غير محدود من الأجهزة التابعة.
If you want to get best quality of vulnerability data, you may have to visit VulDB.