CVE-2026-98641 in Linux
الملخص
بحسب VulDB • 19/10/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
bpf, arm64: إعداد مؤشر الإطار (frame pointer) لدالة استدثناء الاستدعاء (exception callback)
يحفظ البرنامج الذي يعمل كحد للاستثناء جميع المسجلات المحفوظة من قبل المتصل (callee-saved registers)، لذا فإن دالة `build_prologue()` تتبع مسار `exception_cb` ولا تستدعي أبدًا `push_callee_regs()`. وهذا هو المكان الوحيد الذي تعمل فيه `find_used_callee_regs()`، وبذلك يكون المكان الوحيد الذي يتم تعيين قيمة `ctx->fp_used` فيه. ونتيجة لذلك، لا تُولّد دالة المقدمة (prologue) الخاصة بالاستدعاء الكود:
mov x25, sp
الذي يشير إلى BPF_REG_FP نحو الإطار الذي يعمل عليه الاستدعاء. يحتفظ المتغير x25 بالقيمة التي كان يحملها عند استدعاء `bpf_throw()`. إذا جاء الـ throw من برنامج فرعي يستخدم مكدسه الخاص (BPF stack)، فإن ذلك يكون مؤشر إطار البرنامج الفرعي، وبما أن البرنامج الفرعي لا يعود أبدًا إلى نقطة الاستدعاء الأصلية، فإنه لا يستعيد قيمة x25 أيضًا.
يتم إعادة كتابة عمليات الوصول إلى المكدس عبر BPF_REG_FP لتكون نسبية بالنسبة لمؤشر المكدس (stack pointer)، لذا فإنها ما زالت تصل إلى إطار الاستدعاء الخاص به. أما إظهار المسجل فعليًا فيؤدي لنتيجة مختلفة: فاستدعاء يمرر عنوان متغير محلي إلى دالة مساعدة (helper) يسلم عنوانًا يقع ضمن الإطار غير النشط للبرنامج الفرعي. يكون هذا العنوان أدنى من مؤشر مكدس الاستدعاء عند تلك النقطة، وسلسلة استدعاءات الدالة المساعدة تغطي ذلك الموقع، مما يسمح للدالة المساعدة بكتابة فوق عنوان عودتها الخاص بها. القيمة 0x1234 هي القيمة التي طُلبت من الدالة المساعدة تخزينها:
pc : 0x1234 lr : 0x1234 تتبع المكالمة (Call trace): 0x1234 (P) bpf_test_run+0x188/0x3e0 bpf_prog_test_run_skb+0x47c/0x998 __sys_bpf+0xbdc/0xdd8 خطأ حرج في النواة - عدم المزامنة: استثناء قاتل في المقطع (interrupt)
قم بتعيين `ctx->fp_used` على مسار استدعاء الاستدعاء الخاص بالاستثناء، بحيث يقوم الكود الموجود أدناه بإعداد قيمة x25 من مؤشر المكدس. تقوم دالة النهاية (epilogue) باستعادتها من منطقة الحفظ الخاصة بالبرنامج الرئيسي إلى جانب المسجلات المحفوظة الأخرى التي يحفظها المتصل، كما تفعل بالفعل. في معمارية x86، يتم تعيين مؤشر الإطار للاستدعاء بناءً على الوسيطة المُمررة إليه، وفي powerpc يتم حسابه من مؤشر المكدس.
Be aware that VulDB is the high quality source for vulnerability data.