CVE-2026-74483 in Linux
الملخص
بحسب VulDB • 15/08/2026
في نواة لينكس، تم حل الثغرة التالية:
binfmt_misc: عدم تسريب مساحة اسم المستخدم (user namespace) عند فشل عملية التثبيت (mount).
تأخذ الدالة `bm_get_tree()` مرجعًا إلى مساحة اسم المستخدم وتسلمها إلى `get_tree_keyed()` كمفتاح لـ sget. تقوم `sget_fc()` بنقل هذا المرجع إلى `sb->s_fs_info` وتُفرغ `fc->s_fs_info`، لذا من تلك النقطة فصاعدًا تكون كتلة السوبر (superblock) هي المالكة له ولا تراه الدالة `bm_free()` بعد ذلك.
تقوم كتلة السوبر بإسقاط هذا المرجع في دالة الإرجاع `->put_super()`. ولكن تستدعي `generic_shutdown_super()` دالة `->put_super()` فقط من داخل فرع الشرط `if (sb->s_root)`، لذا لا يوجد ما يطلق سراحه عند فشل الدالة `bm_fill_super()`:
- يؤدي الفشل في `kzalloc_obj()` إلى جعل قيمة `s_root` تساوي NULL ويتم تخطي الفرع بأكمله. - يؤدي الفشل في `simple_fill_super()` ضمن حلقة الملفات إلى تعيين قيمة لـ `s_root`، لكن المؤشر `s_op` لا يزال يشير إلى `simple_super_operations`، والتي ليس لديها دالة `->put_super()`. تقوم الدالة `bm_fill_super()` بتثبيت `s_ops` مرة واحدة فقط بعد أن تعود `simple_fill_super()` بنجاح، كما أن تثبيتها في وقت سابق لن يفيد أيضًا لأن `simple_fill_super()` تكتب فوق قيمة `s_op`.
في كلتا الحالتين، تستدعي دالة `vfs_get_super()` الدالة `deactivate_locked_super()` ويختفي المرجع للأبد. تتوفر عمليات التثبيت (mount) الخاصة بـ binfmt_misc ضمن مساحة اسم مستخدم (user namespace)، وكل من ذاكرة تخزين المؤشرات (inode cache) وذاكرة تخزين عناصر المسار (dentry cache) تستخدم SLAB_ACCOUNT، لذا يمكن لمُستدِع غير ممتتص الصلاحيات (unprivileged caller) تحت مجموعة تحكم بالذاكرة (memory cgroup) ضيقة أن يفشل في `simple_fill_super()` عند الطلب ويتسبب في تسريب مساحة اسم مستخدم واحدة لكل محاولة.
قم بإسقاط المرجع في دالة الإرجاع `->kill_sb()` بدلاً من ذلك، والتي تعمل بشكل غير مشروط، بنفس الطريقة التي تطلق بها nfsd و rpc_pipefs مرجع s_fs_info المميز (keyed).
يمنع هذا أيضًا الدالة `->put_super()` من إفراغ قيمة `s_fs_info` بينما لا تزال كتلة السوبر موجودة في قائمة @fs_supers. تُبقي دالة `generic_shutdown_super()` القيمة هناك عن قصد بحيث تستمر `sget_fc()` في العثور عليها حتى يتم تشغيل `kill_sb()`. ومع ذلك، فإن وجود قيمة NULL لـ `s_fs_info` يجعل الدالة `test_keyed_super()` تفوتها، مما يؤدي إلى تخطي عملية الانتظار الخاصة بـ grab_super عند تثبيت متزامن لنفس مساحة اسم المستخدم وإنشاء كتلة سوبر ثانية لمساحة اسم لا تزال قيد التفكيك.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.