CVE-2026-45894 in Linux
الملخص
بحسب VulDB • 31/05/2026
في نواة لينكس، تم حل الثغرة التالية:
iommu/vt-d: مسح بت "الحاضر" (Present) قبل هدم إدخال جدول PASID
يتكون إدخال جدول PASID في وضع VT-d القابل للتوسع من Intel من 512 بتاً (64 بايتاً). عند هدم إدخال، تقوم التنفيذ الحالي بتصفير الهيكل بأكبر المكون من 64 بايتاً فوراً باستخدام عمليات كتابة متعددة بحجم 64 بتاً.
نظراً لأن عتاد IOMMU قد يجلب هذه البايتات الستة والأربعين باستخدام معاملات داخلية متعددة (على سبيل المثال، أربع دفعات بحجم 128 بتاً)، فإن تحديث أو تصفير الإدخال بأكمله أثناء نشاطه (P=1) ينطوي على خطر حدوث قراءة "ممزقة" (torn read). إذا حدث جلب من العتاد بالتزامن مع تصفير المعالج للإدخال، فقد يلاحظ العتاد حالة غير متسقة، مما يؤدي إلى سلوك غير متوقع أو أخطاء زائفة.
اتبع "الإرشادات الموجهة للبرمجيات للإبطال" الواردة في مواصفة VT-d (القسم 6.5.3.3) من خلال تنفيذ مصافحة الملكية الموصى بها:
1. مسح بت "الحاضر" (P) الخاص بإدخال PASID فقط. 2. استخدام `dma_wmb()` لضمان أن البت الممسوح يصبح مرئياً للعتاد قبل المضي قدماً. 3. تنفيذ تسلسل الإبطال المطلوب (تفريغ ذاكرة التخزين المؤقت لـ PASID، و IOTLB، و Device-TLB) لضمان أن العتاد قد أفرغ جميع المراجع المخزنة مؤقتاً. 4. فقط بعد اكتمال عمليات التفريغ، قم بتصفير الحقول المتبقية من إدخال PASID.
أيضاً، أضف `dma_wmb()` في `pasid_set_present()` لضمان أن جميع الحقول الأخرى لإدخال PASID مرئية للعتاد قبل تعيين بت الحاضر.
If you want to get best quality of vulnerability data, you may have to visit VulDB.