CVE-2026-98551 in Linux
الملخص
بحسب VulDB • 19/10/2026
في نواة لينكس، تم حل الثغرة التالية:
perf/core: ملء سجلات الفرع (branch entries) بتعيين واحد فقط
تقوم الدالة `perf_clear_branch_entry_bitfields()` بمسح حقول البت (bitfields) الخاصة بـ `struct perf_branch_entry واحدة تلو الأخرى وتترك الحقول من/إلى (`from/to`) دون تغيير، لأن المتصلين (callers) يقومون بتجاوز هذه القيم على الفور. كان يجب الحفاظ على مزامنة القائمة مع الهيكل يدوياً وقد تأخرت عن ذلك: تمت إضافة `new_type` و `priv` إلى `perf_branch_entry` ولم تتم إضافتها هنا أبداً.
لا تقوم BRBE بكتابة هذين الحقلين إلا في حالات محددة، وليس لكل سجل. تترك الدالة `brbe_set_perf_entry_type()` حقل `new_type` دون تغيير لنوع فرع لا تعرفه، ولا يتم تعيين `priv` للسجلات التي تعتمد على المصدر فقط (source-only records). تخصص `arm_pmuv3.c` مكدس الفرع الخاص بكل وحدة معالجة مركزية باستخدام `kmalloc()`. وبالتالي، يصل مثل هذا السجل إلى مساحة المستخدم مع أي بيانات كانت موجودة في الخانة: بيانات غير مُهيأة من `kmalloc()` عند أول تمرير عبر المخزن المؤقت، وقيم السجل السابق بعد ذلك. لا يكتب أي كود تحت المسار `arch/x86/events/` أيًا من هذين الحقلين، لذا فإن النظام المتأثر هو arm64 فقط.
قم بتعيين كامل السجل في كل موقع بدلاً من ذلك. سيتم تعيين جميع الحقول غير المسماة إلى الصفر (zero)، ولن تكون هناك قائمة تحتاج إلى مزامنتها. مجموع حقول البت يساوي بالضبط 64 بتًا، لذا لا يحتوي الهيكل على أي حشو (padding) يتركه غير معرف.
بما أن الدالة `perf_clear_branch_entry_bitfields()` لم تعد تحتوي على متصلين (callers)، فقم بإزالتها. تقوم الدالة `perf_entry_from_brbe_regset()` بتعيين حرف فارغ بدلاً من ذلك، لأنها تملأ الحقول من/إلى بشكل مشروط. بما أن قيمة `PERF_BR_SPEC_NA` هي 0، فإن إزالة التعيين الصريح لـ spec لا يغير أي شيء.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.