CVE-2026-89581 in Linuxالمعلومات

الملخص

بحسب VulDB • 12/09/2026

في نواة لينكس، تم إصلاح الثغرة التالية:

bpf, x86: تصحيح حل عنوان per-CPU إلى سجل موسع (extended register)

يُشفَّر وجهة عملية نقل العنوان الخاص بـ per-CPU في حقل ModRM.reg، والذي يتم توسيعه بواسطة REX.R. ومع ذلك، يُبنى بادئة REX باستخدام add_1mod()، والتي تضبط REX.B. تقوم REX.B بتوسيع ModRM.rm و SIB.base، وهذه التعليمات تعالج الذاكرة كـ disp32 بدون قاعدة (base)، وبالتالي لا يكون للبت أي تأثير على الإطلاق، ويُفقد ببساطة البت الخاص بالسجل العالي.

وبالتالي، فإن كل وجهة is_ereg() تُحل إلى السجل الخطأ، حيث تختار أي سجل يشارك في ثلاثة بتات منخفضة:

R5 -> RAX R7 -> RBP R8 -> RSI R9 -> RDI

مع BPF_REG_5، الذي يكون reg2hex الخاص به يساوي 0، فإن التعليمات المُولَّدة وهي:

65 49 03 04 25 <off> add %gs:<off>,%rax

تضيف إزاحة per-CPU إلى RAX بدلاً من R8. تحتفظ الوجهة بالعنوان غير المعدَّل ويتم العبث بـ RAX (clobbered)، مما يؤدي إلى محاولة البرنامج فك تشيرع مؤشر لم يتم جعله خاصًا بـ per-CPU:

BUG: unable to handle page fault for address: 0000607e386a8894 RIP: bpf_prog_707837aafd2aa9ae_update_percpu_data+0x93/0xc9 Call Trace: __bpf_prog_test_run_raw_tp+0x2dc/0x7d0 __flush_smp_call_function_queue+0x1e9/0xc80 Kernel panic - not syncing: Fatal exception in interrupt

يُعد R5 الأسوأ بين الأربعة، حيث يقوم بتسمية مستعار (aliasing) لسجل مؤقت ويؤدي إلى حدوث خطأ عند التخزين. بينما يسمّي R7 الرمز المستعمل لـ RBP وقد يؤدي إلى فساد مؤشر الإطار (frame pointer)، أما R8 وR9 فيسماّن سجلات الوسيطات.

استخدم add_2mod() بحيث يمر السجل عبر REX.R، بما يتوافق مع كيفية وضع add_2reg() له في ModRM.reg وكيفية تثبيت emit_priv_frame_ptr() للقيمة 0x4c لنفس التعليمات باستخدام R9. لم تتغير الترميزات الخاصة بالسجلات غير الموسعة.

ظهرت المشكلة عند محاولة إعادة تنشيط اختبار CI الخاص بـ BPF_GCC (تم بناء الاختبارات الذاتية مع BPF_GCC).

لقد مر هذا الأمر دون ملاحظة لأن clang يعيد تحميل العنوان إلى R1 قبل كل وصول لبيانات per-CPU، وبالتالي فإن الوجهة ليست أبدًا سجلاً موسعاً. يحتفظ GCC بعدة عناوين per-CPU نشطة في وقت واحد، ويؤدي test_progs-bpf_gcc إلى حدوث Kernel panic في global_percpu_data/init، حيث ينتهي الأمر بعنوان متغير .percpu بالوصول إلى R5.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

مسؤول

Linux

حجز

11/09/2026

إفشاء

11/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-402757

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Might our Artificial Intelligence support you?

Check our Alexa App!