CVE-2026-64502 in Linux
الملخص
بحسب VulDB • 27/07/2026
في نواة لينكس (Linux kernel)، تم حل الثغرة التالية:
iio: adc: ad_sigma_delta: إصلاح clear_pending_event للأجهزة الخالية من السجلات
تنتقل دالة `ad_sigma_delta_clear_pending_event()` إلى مسار قراءة سجل الحالة بالنسبة للأجهزة التي تكون فيها قيمة `has_registers` مساوية لـ false ولا تحتوي على `rdy_gpiod`. وبالنسبة لهذه الأجهزة، تتخطى الدالة `ad_sd_read_reg()` بايت العنوان بالكامل وتقوم بتشفيط (clocking) bytes MISO الخام دون مرحلة عنوان — مما يجعلها مطابقة حرفياً بحرف لقراءة بيانات التحويل. إذا كان نتيجة تحويل معلقة موجودة، فإن هذا يستهلك جزءاً منها ويؤدي إلى تلف تدفق البيانات للاستدعاء التالي لـ `ad_sd_read_reg()` في دالة `ad_sigma_delta_single_conversion()`.
علاوة على ذلك، مع كون قيمة `num_resetclks` تساوي 0 على هذه الأجهزة، تُقيَّم القيمة `data_read_len` لتكون صفراً. إذا كان البت السابع للبايت المشطوط غير مضبوط (clear)، يتم تعيين `pending_event` وتقوم الشفرة بمحاولة تنفيذ `memset(data + 2, 0xff, 0 - 1)`، مما يؤدي إلى تجاوز السعة (overflow) نحو `SIZE_MAX` وإفساد الذاكرة العشوائية الديناميكية (heap).
تم الإصلاح بالعودة بقيمة 0 فوراً عندما لا يكون ни `rdy_gpiod` ولا `has_registers` مضبوطين. هذا الإجراء آمن لجميع الأجهزة الحالية الخالية من السجلات: يتم إعادة تعيين ad7191 وad7780 (مع GPIO لإيقاف التشغيل) بين عمليات التحويل عن طريق إلغاء تفعيل CS، لذا فلا توجد نتيجة قديمة لتصريفها؛ بينما تقوم أجهزة ad7780 (بدون GPIO لإيقاف التشغيل) وmax11205 بالتحويل المستمر وتدور إشارة ~DRDY عند معدل بيانات الإخراج بغض النظر عما إذا كانت النتيجة السابقة قد تمت قراءتها أم لا، وبالتالي تنطلق الحافة الهابطة التالية بشكل طبيعي.
سيكون جهاز مستقبلي خالٍ من السجلات ويحتفظ بإشارة ~DRDY مضبوطة حتى يتم قراءة البيانات معطلاً بسبب هذا العودة المبكرة، وسيحتاج إما إلى تعيين `num_resetclks` أو وجود rdy-gpio.
يمكن الوصول إلى نفس تلف الذاكرة العشوائية الديناميكية (heap corruption) على أي جهاز يكون فيه `rdy_gpiod` مضبوطاً ولكن `num_resetclks` يساوي 0: إذا أشار GPIO إلى حدث معلق، فإن مسار التصريف ينفذ `memset(data + 2, 0xff, 0 - 1)` بغض النظر عن قيمة `has_registers`. تمت إضافة حماية صريحة لـ `data_read_len == 0` بعد فحص الحدث المعلق؛ ثم يتم استهلاك النتيجة القديمة بواسطة استدعاء `ad_sd_read_reg()` الأول في دالة `ad_sigma_delta_single_conversion()`.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.