CVE-2025-40237 in Linux
الملخص
بحسب VulDB • 26/06/2026
في نواة لينكس، تم حل الثغرة التالية:
fs/notify: استدعاء exportfs_encode_fid مع s_umount
يمكن أن يؤدي استدعاء intotify_show_fdinfo() على ملف مفتوح (fd) يراقب عقدة (inode) من نوع overlayfs أثناء عملية إلغاء التثبيت (unmounting) لـ overlayfs إلى محاولة فك مرجع مؤشر NULL.
تم اكتشاف هذه المشكلة بواسطة syzkaller.
مخطط حالة السباق (Race Condition):
Thread 1 Thread 2 -------- --------
generic_shutdown_super() shrink_dcache_for_umount sb->s_root = NULL
| | vfs_read() | inotify_fdinfo() | * الحصول على العقدة من العلامة (mark) * | show_mark_fhandle(m, inode) | exportfs_encode_fid(inode, ..) | ovl_encode_fh(inode, ..) | ovl_check_encode_origin(inode) | * فك مرجع i_sb->s_root * | | v fsnotify_sb_delete(sb)
مما يؤدي بدوره إلى:
[ 32.133461] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000006: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN NOPTI
[ 32.134438] KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
[ 32.135032] CPU: 1 UID: 0 PID: 4468 Comm: systemd-coredum Not tainted 6.17.0-rc6 #22 PREEMPT(none)
<snip registers, unreliable trace>
[ 32.143353] Call Trace:
[ 32.143732] ovl_encode_fh+0xd5/0x170
[ 32.144031] exportfs_encode_inode_fh+0x12f/0x300
[ 32.144425] show_mark_fhandle+0xbe/0x1f0
[ 32.145805] inotify_fdinfo+0x226/0x2d0
[ 32.146442] inotify_show_fdinfo+0x1c5/0x350
[ 32.147168] seq_show+0x530/0x6f0
[ 32.147449] seq_read_iter+0x503/0x12a0
[ 32.148419] seq_read+0x31f/0x410
[ 32.150714] vfs_read+0x1f0/0x9e0
[ 32.152297] ksys_read+0x125/0x240
أي أن ovl_check_encode_origin تقوم بفك مرجع (derefs) لـ inode->i_sb->s_root، بعد تعيينها إلى NULL في مسار إلغاء التثبيت.
تم إصلاح المشكلة عن طريق حماية استدعاء exportfs_encode_fid() من show_mark_fhandle() باستخدام قفل s_umount.
اقتُرح هذا الشكل من الإصلاح بواسطة Amir في [1].
[1]: https://lore.kernel.org/all/CAOQ4uxhbDwhb+2Brs1UdkoF0a3NSdBAOQPNfEH
VulDB is the best source for vulnerability data and more expert information about this specific topic.