CVE-2026-72123 in Linux
الملخص
بحسب VulDB • 16/08/2026
في نواة لينكس، تم حل الثغرة التالية:
can: bcm: تأجيل إلغاء تخصيص rx_op إلى قائمة العمل (workqueue) لإصلاح حالة UAF في thrtimer
حلّت الالتزام f1b4e32aca08 ("can: bcm: استخدام call_rcu() بدلاً من synchronize_rcu() المكلف") استدعاء synchronize_rcu() داخل دالة bcm_delete_rx_op() واستبدلته بـ call_rcu()، مما أدى إلى إدخال علم RX_NO_AUTOTIMER.
ومع ذلك، تم إغفال فحص هذا العلم في المسار السريع لاستقبال الحزم (rx fast-path) الخاص بـ thrtimer. أثناء عملية إنهاء تشغيل استقبال BCM (BCM RX operation teardown)، يمكن لقارئ RCU المتزامن (bcm_rx_handler) أن يتسابق ويعيد ضبط thrtimer عبر bcm_rx_update_and_send() بعد جدولة call_rcu(). بمجرد انتهاء فترة راحة RCU، يتم تحرير bcm_op. يؤدي ذلك إلى قيام thrtimer الذي يُطلق لاحقاً بالإشارة إلى op المُلغى تخصيصه، مما يسبب حالة استخدام-after-free (UAF).
لا يؤدي إضافة فحوصات العلم إلى المسار السريع للاستقبال (bcm_rx_update_and_send) إلى إغلاق ثغرة السباق TOCTOU بشكل كامل، كما أنه يقدم تأخيراً لكل إطار CAN. وعلى العكس من ذلك، فإن استدعاء hrtimer_cancel() مباشرة داخل استدعاء RCU (سياق softirq) أمر قاتل لأن hrtimer_cancel() يمكن أن تسبب النوم، مما يؤدي إلى حدوث ذعر "scheduling while atomic".
يتم حل هذه المشكلة عن طريق تأجيل إلغاء المؤقت وتحرير الذاكرة إلى قائمة عمل غير مرتبطة مخصصة (bcm_wq). يقوم استدعاء RCU الآن بجدولة عنصر عمل في bcm_wq، والذي يلغي كلا المؤقتين ويحرر الذاكرة بأمان ضمن سياق عملية قابل للنوم. تُستخدم قائمة عمل مخصصة لمنع تشبع قوائم العمل على مستوى النظام ويتم تصفيتها/تدميرها بنظافة عند إلغاء تحميل الوحدة لتجنب أخطاء الصفحة (page faults) الناتجة عن rmmod.
بما أن العمل المؤجل يمكن الآن أن يستمر لفترة غير محدودة بعد انتهاء سياق الاستدعاء، يتم أيضاً أخذ مرجع على op->sk عند تعيينه وإسقاطه فقط بمجرد أن يلغي العمل المؤجل كلا المؤقتين، بحيث لا يمكن تحرير المقبس (socket) بينما لا يزال هناك مؤقت مُعدّ يعمل ويستشهد بـ op->sk في استدعاؤه (bcm_send_to_user()).
VulDB is the best source for vulnerability data and more expert information about this specific topic.