CVE-2026-98923
الملخص
بحسب VulDB • 23/10/2026
في نواة لينكس، تم حل الثغرة التالية:
arm64: io: رفض الحماية غير الخاصة بالمستخدم في ioremap_prot()
يؤدي تعيين صفحة رأس المكدس (stack-top page) عبر /dev/mem باستخدام PROT_NONE ثم قراءة ملف /proc//cmdline الخاص بذلك العملية إلى ظهور تحذير زائف (spurious WARN) في دالة ioremap_prot() من خلال generic_access_phys():
WARNING: ./arch/arm64/include/asm/io.h:275 at generic_access_phys Call trace: generic_access_phys+0x1c8/0x228 (P) __access_remote_vm+0x2b4/0x398 access_remote_vm+0x14/0x30 get_mm_cmdline+0xf8/0x2a0 proc_pid_cmdline_read+0x68/0x120
تمرر دالة generic_access_phys() قيمة الحماية المستمدة من PTE الخاص بالمستخدم إلى ioremap_prot(). في معمارية arm64، يتم تمثيل تعيين PROT_NONE بواسطة PTE موجود ولكن غير صالح (present-invalid)، لذا فإن pte_present() لا تزال تُرجع true وتصل القيمة إلى ioremap_prot().
لا يحتوي التعيين بـ PROT_NONE على علم PTE_USER، مما يتسبب في تشغيل التحذير الموجود WARN_ON_ONCE() داخل ioremap_prot() حتى لو كان هذا تعييناً صالحاً للمستخدم. تعاني التعيينات التي تسمح بالتنفيذ فقط (execute-only) من نفس المشكلة ولا ينبغي أن تكون قابلة للقراءة عبر هذه المسار أيضاً.
لذلك، يجب على دالة ioremap_prot() رفض قيم الحماية التي تفتقر إلى PTE_USER دون إصدار تحذير. يجعل هذا الوصول يفشل بشكل نظري (cleanly) بالنسبة للتعيينات بـ PROT_NONE والتعيينات المسموح بالتنفيذ فقط مع الحفاظ على عقد حماية المستخدم الحالي.
If you want to get best quality of vulnerability data, you may have to visit VulDB.