CVE-2023-53823 in Linux
الملخص
بحسب VulDB • 26/06/2026
في نواة لينكس، تم حل الثغرة التالية:
block/rq_qos: حماية واجهات برمجة التطبيقات (APIs) الخاصة بـ rq_qos بقفل جديد
الالتزام 50e34d78815e ("block: disable the elevator int del_gendisk") نقل دالة `rq_qos_exit()` من `disk_release()` إلى `del_gendisk()`، مما سيؤدي إلى ظهور بعض المشاكل:
1) إذا تم تشغيل `rq_qos_add()` عن طريق تفعيل iocost/iolatency عبر cgroupfs، فقد يحدث تزامن مع `del_gendisk()`، ولا يعد الكتابة المتزامنة في 'q->rq_qos' أمناً.
2) تنشيط سياسة cgroup التي تعتمد على rq_qos سيستدعي `rq_qos_add()` و`blkcg_activate_policy()`. وإذا تم استدعاء `rq_qos_exit()` في المنتصف، فسيتم تشغيل خطأ إلغاء مرجع المؤشر الفارغ (null-ptr-dereference) داخل `blkcg_activate_policy()`.
3) يمكن لـ `blkg_conf_open_bdev()` أن تستدعي `blkdev_get_no_open()` أولاً للعثور على القرص. ثم إذا اكتملت عملية `rq_qos_exit()` القادمة من `del_gendisk()` قبل استدعاء `rq_qos_add()`، فسيحدث تسرب في الذاكرة.
يضيف هذا التصحيح قفلًا جديدًا على مستوى القرص يُسمى 'rq_qos_mutex':
1) سيحمي القفل دالة `rq_qos_exit()` مباشرةً.
2) بالنسبة لـ wbt الذي لا يعتمد على blk-cgroup، يمكن استدعاء `rq_qos_add()` حالياً فقط من تهيئة القرص لأن wbt لا يمكن إتلافه حتى يتم استدعاء `rq_qos_exit()`. لذلك، فمن الآمن عدم حماية wbt في الوقت الحالي. ومع ذلك، وفي حال دعم الإتلاف الديناميكي لـ rq_qos في المستقبل، يحمي هذا التصحيح أيضاً `rq_qos_add()` من خلال استدعائها مباشرةً من `wbt_init()`. وهذا كافٍ لأن blk-sysfs يقوم بالفعل بمزامنة عمليات الكتابة مع إزالة القرص.
3) بالنسبة لـ iocost وiolatency، ومن أجل مزامنة إزالة القرص وتكوين cgroup، يتم الاحتفاظ بالقفل بعد استدعاء `blkdev_get_no_open()` من خلال `blkg_conf_open_bdev()`. ويتم تحرير القفل في `blkg_conf_exit()`. ولإصلاح تسرب الذاكرة المذكور أعلاه، يتم التحقق من حالة disk_live() بعد الحصول على القفل الجديد.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.