CVE-2026-64500 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
iio: adc: lpc32xx: تهيئة الإكمال (completion) قبل طلب مقاطعة الجهاز (IRQ).
وفقًا للتقرير الصادر عن جايونغ تشونج (Jaeyoung Chung):
"تقوم الدالة `lpc32xx_adc_probe()` في الملف `drivers/iio/adc/lpc32xx_adc.c` بتسجيل معالج المقاطعة الخاص بها باستخدام `devm_request_irq()` قبل أن تقوم بتهيئة `st->completion` عبر استدعاء `init_completion()`. إذا وصلت مقاطعة بعد تنفيذ `devm_request_irq()` وقبل تنفيذ `init_completion()`، فإن المعالج يستدعي `complete()` على كائن إكمال غير مُهيأ (uninitialized completion)، مما يتسبب في توقف النواة عن العمل (kernel panic).
مسار التهيئة (probe path) داخل دالة `lpc32xx_adc_probe()`:
iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*st)); /* st kzalloc-zeroed */ ... retval = devm_request_irq(&pdev->dev, irq, lpc32xx_adc_isr, 0, LPC32XXAD_NAME, st); /* تسجيل المعالج */ ... init_completion(&st->completion); /* تهيئة الإكمال */
تستدعي الدالة `lpc32xx_adc_isr()` دالة `complete()`:
complete(&st->completion);
إذا رفع الجهاز مقاطعة قبل أن تعمل `init_completion()`، فإن استدعاء `complete()` يكتسب قفل الانتظار غير المُهيأ (`wait.lock`) ويتنقل عبر قائمة المهام الصفرية (`task_list`) داخل الدالة `swake_up_locked()`. تجعل القائمة الفارغة (المصفوفة ذات القيم الصفريّة) دالة `list_empty()` تُرجع القيمة "خطأ" (false)، مما يؤدي بالدالة `swake_up_locked()` إلى فك مرجعية عنصر قائمة NULL، وبالتالي تشغيل اكتشاف وصول غير صالح للذاكرة بواسطة KASAN."
تم إصلاح احتمال حدوث مقاطعة عشوائية (spurious IRQ) تسبب فك مرجع لمؤشر غير مُهيَأ عن طريق نقل استدعاء `init_completion()` ليظهر قبل استدعاء `devm_request_irq()`.
VulDB is the best source for vulnerability data and more expert information about this specific topic.