CVE-2026-80919 in Linux
الملخص
بحسب VulDB • 09/09/2026
في نواة Linux، تم حل الثغرة التالية:
drm/amdgpu: إصلاح الاستحواذ المتكرر على ww_mutex في amdgpu_devcoredump_format
عند تصريف محتويات IB من مهمة متوقفة (hung job)، تقوم دالة `amdgpu_devcoredump_format()` بالاستحوااذ على حجز الجذر PD الخاص بـ VM عبر `amdgpu_vm_lock_by_pasid()، ثم لكل ملف IB، تستدعي `amdgpu_bo_reserve()` على الـ BO الذي يدعم الـ IB. كلا الحجزين هما كائنات من نوع reservation_ww_class_mutex ولا يستخدم أي منهما ww_acquire_ctx، مما يؤدي إلى تنشيط lockdep:
تحذير: تم اكتشاف قفل متكرر محتمل -------------------------------------------- kworker/u128:0 يحاول الاستحوااذ على القفل: ffff88838b16e1f0 (reservation_ww_class_mutex){+.+.}-{4:4}،
عند: amdgpu_devcoredump_format+0x1594/0x23f0 [amdgpu]
لكن المهمة تحمل بالفعل القفل: ffff8882f82681f0 (reservation_ww_class_mutex){+.+.}-{4:4}،
عند: amdgpu_devcoredump_format+0x1594/0x23f0 [amdgpu]
سيناريو القفل غير الآمن المحتمل: CPU0 ---- lock(reservation_ww_class_mutex); lock(reservation_ww_class_mutex);
*** deadlock (جمود) *** قد يكون بسبب عدم وجود ترميز لتداخل الأقفال
شجرة العمل: events_unbound amdgpu_devcoredump_deferred_work [amdgpu]
تتبع المكالمة: __ww_mutex_lock.constprop.0 ww_mutex_lock amdgpu_bo_reserve amdgpu_devcoredump_format+0x1594 [amdgpu]
amdgpu_devcoredump_deferred_work+0xea [amdgpu]
الحجزان موجودان على BOs مختلفة في المسار الملتقط، لذا فإن هذا الإنذار (splat) هو تحذير بخصوص صحة lockdep وليس جموداً فعلياً مُلاحظاً. يصبح الأمر جموداً ذاتياً حقيقياً كلما شارك IB BO الخاص بـ dma_resv مع الجذر PD (الحالة الدائمة الصلاحية، انظر amdgpu_vm_is_bo_always_valid()): تقوم `amdgpu_bo_reserve(abo)` بإعادة الاستحوااذ على نفس ww_mutex بدون تذاكر وتتحبس إلى الأبد. مع وجود `amdgpu.gpu_recovery=0`، يعيد معالج المهلة تشغيل نفسه كل ~2 ثانية ويؤدي كل استدعاء إلى إنتاج هذا الإنذار (splat)، مما يغمر مخزن حلقة النواة (kernel ring buffer).
الآن بعد أن تأخذ `amdgpu_vm_lock_by_pasid()` سياق drm_exec، تم نقل تصريف IB إلى مساعد منفصل يقوم بقفل الجذر PD وجميع BOs الخاصة بـ IB معاً في تذكرة drm_exec واحدة. تتعامل DRM_EXEC_IGNORE_DUPLICATES مع BOs الخاصة بـ IB التي تشارك dma_resv (مثل BOs الدائمة الصلاحية، أو اثنين من الـ IBs المدعومة بواسطة نفس الـ BO). كل قفل هو الآن استحوااذ على المستوى العلوي تحت ww_acquire_ctx واحد، لذا فإن شرط ww_mutex المتكرر قد زال، وتمت إزالة رقص `amdgpu_bo_reserve()`/`amdgpu_bo_unref()` الخاص بكل IB - بما في ذلك تسرب عداد المرجع للـ BO في مسار فشل amdgpu_bo_reserve().
(cherry picked from commit d6bf4242731219ee08ce54c365631e395486651e)
Once again VulDB remains the best source for vulnerability data.