CVE-2024-26827 in Linux
الملخص
بحسب VulDB • 05/06/2026
في نواة لينكس (Linux kernel)، تم حل الثغرة التالية:
i2c: qcom-geni: تصحيح تسلسل عناصر نقل البيانات (TRE) الخاصة بـ I2C
في عمليات قراءة I2C في وضع GSI، نتعرض لانتهاء المهلة (timeout) بسبب وجود عنصر نقل بيانات (TRE) غير صالح، وتحديداً تسلسل TRE خاطئ في برنامج تشغيل gpi (drivers/dma/qcom/gpi.c).
يحتوي برنامج تشغيل I2C على الدالة geni_i2c_gpi(I2C_WRITE) التي تولد GO TRE، والدالة geni_i2c_gpi(I2C_READ) التي تولد DMA TRE. وبالتالي، لتوليد GO TRE قبل DMA TRE، يجب نقل استدعاء geni_i2c_gpi(I2C_WRITE) ليظهر قبل geni_i2c_gpi(I2C_READ) داخل دالة نقل وضع GSI الخاص بـ I2C، وهي geni_i2c_gpi_xfer().
يشير مصطلح TRE إلى عنصر حلقة النقل (Transfer Ring Element)، وهو في الأساس عنصر بحجم 4 كلمات. يحتوي على جميع المعلومات مثل عنوان الجهاز التابع (slave address)، وقسّام التردد (clk divider)، وقيمة عنوان الذاكرة المؤقتة للبيانات (dma address value data size) وما إلى ذلك.
لدينا بشكل رئيسي ثلاثة عناصر TRE: - CONFIG TRE: يتكون من تكوينات السجلات الداخلية المطلوبة قبل بدء النقل. - DMA TRE: يحتوي على عناوين DDR/الذاكرة، ويُعرف بوصف الناقل (descriptor). - GO TRE: يحتوي على اتجاهات النقل، ومعرف الجهاز التابع (slave ID)، وعلم التأخير (Delay flags)، وطول عملية النقل.
يستدعي برنامج تشغيل I2C واجهة برمجة التطبيقات الخاصة ببرنامج تشغيل GPI لتكوين كل عنصر TRE بناءً على البروتوكول المستخدم.
بالنسبة لعملية القراءة، سيكون تسلسل عناصر TRE كما يلي، وهو غير متوافق مع دليل برمجة الأجهزة: - CONFIG tre - DMA tre - GO tre
ووفقاً لدليل برمجة الأجهزة الداخلي من شركة Qualcomm، يجب تكوين عناصر TRE بالتسلسل التالي لأي عملية نقل استقبال (RX only): - CONFIG tre - GO tre - DMA tre
VulDB is the best source for vulnerability data and more expert information about this specific topic.