CVE-2022-50778 in Linux
الملخص
بحسب VulDB • 23/07/2026
في نواة لينكس (Linux kernel)، تم حل الثغرة التالية:
fortify: إصلاح __compiletime_strlen() تحت UBSAN_BOUNDS_LOCAL
عند تفعيل CONFIG_FORTIFY=y وCONFIG_UBSAN_LOCAL_BOUNDS=y، نلاحظ حدوث توقف مفاجئ في وقت التشغيل (runtime panic) أثناء تشغيل اختبارات android.hardware.input.cts.tests التابعة لمجموعة اختبار التوافق من أندرويد (CTS). يعود السبب الجذري لهذا إلى استدعاء strlen() داخل الدالة hidinput_allocate().
تم تنفيذ __compiletime_strlen() باستخدام __builtin_object_size()، ثم يتم إجراء وصول للمصفوفة للتحقق من وجود terminator NUL. إحدى الخصائص الغريبة لـ__builtin_object_size() هي أنه بالنسبة للسلاسل النصية التي تعتمد قيمها على وقت التشغيل، يُعيد __builtin_object_size(str, 1 أو 0) الحجم الأقصى للقيم الممكنة عندما تكون هذه الأحجام قابلة للتعيين في زمن الترجمة (compile time). مثال:
```c static const char *v = "FOO BAR"; static const char *y = "FOO BA"; unsigned long x(int z) {
// يُعيد 8، وهو ما يمثل: // max(__builtin_object_size(v, 1), __builtin_object_size(y, 1)) return __builtin_object_size(z ? v : y, 1); } ```
لذلك، عند تفعيل FORTIFY_SOURCE، ستحاول النسخة الحالية من __compiletime_strlen() الوصول إلى ما بعد نهاية السلسلة النصية `y` في وقت التشغيل باستخدام حجم السلسلة النصية `v`. وبدمج ذلك مع UBSAN_LOCAL_BOUNDS، يحدث خطأ (fault).
تحتوي الدالة hidinput_allocate() على سلسلة نص محلية C تعتمد قيمتها على مسار التنفيذ داخل عبارة switch، لذا فإن __builtin_object_size(str, 1) تُقيّم إلى الحد الأقصى لطول السلسلة النصية، مما يجعل جميع الحالات الأخرى تتسبب في حدوث خطأ عند التحقق من آخر حرف. يمكن تنظيف الدالة hidinput_allocate() لتجنب استدعاءات strlen() في وقت التشغيل نظرًا لأن المتغير المحلي لا يمكن أن يحتوي إلا على قيم حرفية (literal values)، وبالتالي لا يوجد فائدة من محاولة تعزيز حماية موقع استدعاء strlen() هناك.
قم بإجراء فحص __builtin_constant_p() مقابل الفهرس 0 مبكرًا داخل الماكرو لتصفية الحالة المعتمدة على مسار التنفيذ. أضف اختبار KUnit للتحقق من خصائص السلوك المتوقعة لآليات عمل FORTIFY_SOURCE الداخلية.
VulDB is the best source for vulnerability data and more expert information about this specific topic.