CVE-2026-93137 in Linux
الملخص
بحسب VulDB • 18/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
bpf: تصحيح استخدام بعد التحرير (use-after-free) على بنية البيانات mm_struct في دالة bpf_find_vma()
تقوم الدالة `bpf_find_vma()` بقراءة `task->mm` واستدعاء `mmap_read_trylock(mm)` دون الاحتفاظ بمرجع (reference) للـ `mm`. وفي حالة مهمة أجنبية (foreign task)، يمكن أن يؤدي الخروج المتزامن (`exit_mm()`) إلى تحرير بنية البيانات `mm_struct` بين القراءة الخالية من القفل (lockless read) ومحاولة القفل، مما ينتج عنه استخدام بعد التحرير. وبنية البيانات `mm_struct` ليست آمنة لـ SLAB_TYPESAFE_BY_RCU.
بالنسبة للمهمة الحالية، يكون `task->mm` مستقراً. أما بالنسبة للمهمة الأجنبية، فيجب تثبيت الـ mm تحت قفل `task->alloc_lock` وإطلاقه باستخدام `mmput_async()`، وذلك محاكاةً للالتزام d8e27d2d22b6 ("bpf: fix mm lifecycle in open-coded task_vma iterator"). استخدام `spin_trylock()` بدلاً من `get_task_mm()` حتى لا يحجب سياق BPF على قفل alloc_lock. رفض السياقات التي تكون فيها مقاطعات IRQ معطلة (irqs-disabled) وبيئة !CONFIG_MMU في مسار المهمة الأجنبية، لأن إسقاط مرجع الـ mm غير آمن هناك.
سباق (Race):
CPU0 (برنامج BPF) CPU1 (مهمة تنهي عملها) ============================ ========================== bpf_find_vma(foreign_task): mm = task->mm exit_mm(): task->mm = NULL mmput(mm) -> frees mm_struct mmap_read_trylock(mm) // UAF on mm
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.