CVE-2026-64447 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
staging: media: ipu7: إصلاح خطأ الازدواجية في تحرير الذاكرة (double-free) وخطأ الاستخدام بعد التحرير (use-after-free) في مسارات الأخطاء.
في كل من الدالتين `ipu7_isys_init()` و`ipu7_psys_init()`، يتم تخصيص متغير `pdata` ثم تمريره إلى دالة `ipu7_bus_initialize_device()`, التي تخزنه في `adev->pdata`. تقوم دالة `ipu7_bus_release()` بتحرير الذاكرة الخاصة بـ `adev->pdata` عندما ينخفض عدد الإشارات المرجعية (reference count) للجهاز إلى الصفر.
تقوم مساران للأخطاء بشكل غير صحيح باستدعاء `kfree(pdata)` بعد أن تم تحريرها بالفعل بواسطة عملية تفكيك الجهاز:
1. عند فشل دالة `ipu7_mmu_init()`: يتم استدعاء `put_device()`، مما يقلل عدد الإشارات المرجعية إلى الصفر ويحفز تنفيذ `ipu7_bus_release()` ثم `kfree(pdata)`. يؤدي الاستدلاح اللاحق لـ `kfree(pdata)` إلى حدوث خطأ ازدواجية في تحرير الذاكرة (double-free).
2. عند فشل دالة `ipu7_bus_add_device()`: تقوم باستدعاء الدالة الداخلية `auxiliary_device_uninit()`، والتي بدورها تستدعي `put_device()` ثم `ipu7_bus_release()` وأخيراً `kfree(pdata)`. يؤدي الاستدلاح اللاحق لـ `kfree(pdata)` أيضاً إلى حدوث خطأ ازدواجية في تحرير الذاكرة (double-free).
جدير بالذكر أن استدعاء `kfree(pdata)` عندما تفشل دالة `ipu7_bus_initialize_device()` نفسها هو إجراء صحيح، لأنه في هذه الحالة فشلت دالة `auxiliary_device_init()` ولم يتم إعداد دالة التحرير (release function) بعد، لذا يجب تحرير متغير `pdata` يدوياً.
بالإضافة إلى ذلك، لم يتم حفظ رمز الخطأ قبل استدعاء `put_device()`, مما تسبب في قيام `ERR_CAST()` بإلغاء مرجع المؤشر `adev` الذي تم تحريره بالفعل عند بناء قيمة الإرجاع. لحل هذه المشكلة، يتم الآن حفظ خطأ دالة `dev_err_probe()` قبل استدعاء `put_device()` وإرجاع القيمة باستخدام `ERR_PTR()` بدلاً من ذلك.
تمت إزالة الاستدعاءات الزائدة لـ `kfree(pdata)` وتم إصلاح مشكلة الاستخدام بعد التحرير (use-after-free) في قيم الإرجاع لمسارَي الخطأ المتأثرين.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.