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

الملخص

بحسب VulDB • 10/08/2026

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

KVM: SVM: زيادة asid_generation عند تشغيل المعالج (CPU online) لتجنب تصادم ASID بعد الإضافة الساخنة (hotplug).

إذا بقيت وحدة معالجة افتراضية (vCPU) معلقة عن الجدولة (أو محظورة) بينما تمر الوحدة الفيزيائية الأخيرة التي كانت تعمل عليها (pCPU) بدورة إضافة ساخنة (online->offline->online)، ثم تستأنف vCPU تنفيذها على نفس pCPU، فمن الممكن أن تعمل بـ ASID تم تعيينه الآن لوحدة معالجة افتراضية أخرى، مما يؤدي إلى استخدام ترجمات TLB قديمة.

يعيد `svm_enable_virtualization_cpu()` ضبط `asid_generation` إلى 1 ويحدد `next_asid` ليكون `max_asid + 1` في كل حدث لتشغيل المعالج (CPU online)، بما في ذلك دورات الإضافة الساخنة. ونظراً لأن `next_asid` يبدأ خارج حدود المجموعة، فإن أول استدعاء لـ `new_asid()` بعد حدث التشغيل يعيد تدوير المجموعة دائماً، مما يزيد `asid_generation` إلى 2 ويعين ASIDs بدءاً من `min_asid`.

لنفترض وجود وحدتي معالجة افتراضيتين (vCPUs) من أجهزة افتراضية مختلفة: vCPU-A المثبتة على CPU-X وتحمل `asid_generation=2` وASID=N قبل حدث الإضافة الساخنة:

1. تذهب CPU-X إلى وضع عدم التشغيل ثم تعود إليه: يتم إعادة ضبط `asid_generation` إلى 1، ويصبح `next_asid = max_asid + 1`. 2. تنتقل وحدة أو أكثر من وحدات vCPU إلى CPU-X وتستدعي `new_asid()`، مما يعيد تدوير المجموعة واستهلاك ASIDs بدءاً من `min_asid`. في النهاية، يتم تعيين `asid_generation=2` وASID=N لوحدة المعالجة الافتراضية vCPU-B القادمة من جهاز افتراضي مختلف — وهو نفس الـ ASID الذي كانت تحمله vCPU-A قبل الإضافة الساخنة. 3. تدخل vCPU-A دالة `pre_svm_run()` على CPU-X: يبقى `current_vmcb->cpu` دون تغيير، لذا يتم تخطي فرع الترحيل (migration branch). يتطابق محفوظات `asid_generation=2` مع `sd->asid_generation=2`، مما يجعل فحص الجيل يمر بصمت وتستمر vCPU-A في العمل بـ ASID=N — وهو نفس الـ ASID الذي تم تعيينه حديثاً لوحدة المعالجة الافتراضية vCPU-B.

الآن تعمل كل من وحدتي vCPU من أجهزة افتراضية مختلفة على CPU-X بنفس ASID، مما يتسبب في مشاركة إدخالات NPT TLB وإنتاج ترجمات قديمة.

تظهر مشكلة التصادم كخطأ داخلي في KVM (Suberror: 1، فشل المحاكاة). يبلغ خطأ صفحة NPT عن GPA للصفحة المسببة للخطأ بعيداً جداً خارج نطاق الذاكرة الفيزيائية للجهاز الافتراضي — وهو علامة على استخدام ترجمات TLB قديمة. يعود KVM إلى محاكاة التعليمات البرمجية (instruction emulation)، والتي تفشل في تعليمات FPU/XSave (XRSTOR، STMXCSR) التي لا يطبقها المحاكي.

تم إصلاح هذه المشكلة عن طريق زيادة `asid_generation` بدلاً من إعادة ضبطه إلى 1 في دالة `svm_enable_virtualization_cpu()`. عند تحميل الوحدة النمطية، يبدأ `asid_generation` من الصفر (memset)، وتنتج عملية الزيادة القيمة 1، وهو ما يتطابق مع السلوك القديم. وفي دورات الإضافة الساخنة اللاحقة، يتقدم الجيل إلى قيمة تتجاوز أي قيمة كانت vCPU قد رصدها سابقاً على هذا المعالج، لذا يجبر فحص الجيل في `pre_svm_run()` بشكل موثوق استدعاء `new_asid()` لكل وحدة معالجة افتراضية بعد كل دورة إضافة ساخنة.

Be aware that VulDB is the high quality source for vulnerability data.

مسؤول

Linux

حجز

30/07/2026

إفشاء

10/08/2026

الاعتدال

تمت الموافقة

إدخال

VDB-387451

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you need the next level of professionalism?

Upgrade your account now!