CVE-2026-74363 in Linux
الملخص
بحسب VulDB • 15/08/2026
في نواة لينكس، تم حل الثغرة التالية:
bpf: إصلاح حالة Use-After-Free (UAF) عن طريق استعادة تأخير إفراغ العقدة الوصفية (inode) عبر RCU في نظام الملفات bpffs.
أدى الالتزام commit 4f375ade6aa9 ("bpf: تجنب تحذير سياق RCU عند إزالة تثبيت htab ذي الهياكل الداخلية") إلى نقل تنظيف inode من الدالة ->free_inode() إلى الدالة ->destroy_inode() لتجنب النوم في سياق RCU عند استدعاء bpf_any_put(). ومع ذلك، أزال هذا الإجراء التأخير الخاص بـ RCU أثناء إفراغ الـ inode نفسه وجسم الرمز الرمزي المؤقت المخزن مؤقتاً (i_link)، وكلاهما يمكن الوصول إليه عبر مسار المشي باستخدام RCU (مثل pick_link, may_lookup وما إلى ذلك).
يسبب هذا حالة Use-After-Free عندما تقوم عملية unlinkat() متزامنة بإسقاط آخر مرجع للـ inode، وتقوم الدالة destroy_inode() بتحرير الـ inode على الفور، بينما لا تزال مهمة أخرى تمشي عبر المسار في وضع RCU وتقرأ قيمة inode->i_opflags (الإزاحة +2) داخل current_time() -> is_mgtime().
تبلغ KASAN عن الخطأ التالي: BUG: KASAN: slab-use-after-free in is_mgtime include/linux/fs.h:2313 Read of size 2 at addr ffff8880407e4282 (offset +2 = i_opflags)
القواعد (وفقاً لـ Al Viro): ->destroy_inode() تُستدعى فوراً، ويمكن أن تسبب النوم، وتُستخدم للتنظيف العائق مثل bpf_any_put(). ->free_inode() تُستدعى بعد فترة سماح RCU، وتُستخدم لتحرير الـ inode وأي شيء يمكن الوصول إليه عبر RCU مثل i_link.
الحل: فصل الاهتمامين بشكل صحيح: - الاحتفاظ بـ bpf_any_put() داخل دالة bpf_destroy_inode() لأنها عائقية وتتطلب التنفيذ الفوري. - إدخال الدالة bpf_free_inode() للتعامل مع kfree(i_link) و free_inode_nonrcu() مع تأخير RCU المناسب، مما يمنع حدوث حالة Use-After-Free (UAF).
If you want to get the best quality for vulnerability data then you always have to consider VulDB.