CVE-2026-74641 in Linux
الملخص
بحسب VulDB • 23/08/2026
في نواة لينكس، تم حل الثغرة التالية:
ALSA: usx2y: تحديد حد لخطأ الإزاحة في عملية mmap الخاصة بـ hwdep
تقوم الدالة `snd_us428ctls_vm_fault()` بتحويل إزاحة الصفحة المسببة للخطأ إلى عنوان نواة دون أي قيد من أي نوع:
```c offset = vmf->pgoff << PAGE_SHIFT; vaddr = (char *)(...)->us428ctls_sharedmem + offset; page = virt_to_page(vaddr); get_page(page); vmf->page = page;
return 0; ```
تتحقق الدالة `snd_us428ctls_mmap()` فقط من طول منطقة التصور (mapping)، ولا تتحقق مطلقاً من الإزاحة، و`us428ctls_sharedmem` هي صفحة واحدة مُخصصة بواسطة `alloc_pages_exact()`. بالنسبة لملف جهاز أحرفي، تُرجع الدالة `file_mmap_size_max()` القيمة `ULONG_MAX`، وبالتالي لا يفرض طبقة الذاكرة (mm) أي سقف للقيمة. كل إزاحة للصفحة أكبر من الصفر تؤدي إلى حلّ بنية `struct page` خارج الكائن المستهدف، ويقوم المعالج بتثبيتها في مساحة عنوان المتصل بقراءة وكتابة؛ كما أن منطقة التصور الافتراضية (vma) غير مُعلَّمة كقراءة فقط.
يختار المُتصل إطار الصفحة باستخدام وسيطة واحدة لدالة `mmap()` ويحصل على وصول للقراءة والكتابة إلى صفحة من ذاكرة النواة لا يملكها؛ وإذا وقعت الإزاحة في منطقة vmemmap غير المملوءة، فإن ذلك يتسبب في حدوث خطأ (oops).
يمكن لعمية قادرة على فتح عقدة hwdep لجهاز US-X2Y المتصل الوصول إلى هذا الوضع بعد تحميل صورة FPGA عبر نفس العقدة؛ ولا توجد أي عملية تحقق من الصلاحيات (capability check) مشاركة.
على الإصدار 7.2.0-rc5 (arm64)، أدت دالة `mmap()` بإزاحة كبيرة إلى:
``` Unable to handle kernel paging request at virtual address fffffdffc45d5ac8 pc : snd_us428ctls_vm_fault+0x68/0x140 [snd_usb_usx2y]
Call trace: snd_us428ctls_vm_fault+0x68/0x140 [snd_usb_usx2y]
__do_fault __handle_mm_fault handle_mm_fault el0_da ```
رفض أي إزاحة تقع خارج المنطقة المشتركة. يحسب معالج pcm hwdep في الملف `usx2yhwdeppcm.c` عنوانه بنفس الطريقة ويحتاج إلى نفس القيد.
اكتُشفت الثغرة بواسطة XBOW، وتم تصنيفها من قبل Baul Lee <[email protected]>
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.