CVE-2025-40237 in Linux信息

摘要

由 VulDB • 2026-06-13

在 Linux 内核中,已修复以下漏洞:

fs/notify:在 s_umount 保护下调用 exportfs_encode_fid

当正在卸载 overlayfs 时,对监视 overlayfs 索引节点(inode)的文件描述符(fd)调用 inotify_show_fdinfo(),可能导致解引用空指针(NULL ptr)。

此问题由 syzkaller 发现。

竞态条件(Race Condition)示意图:

线程 1 线程 2 -------- --------

generic_shutdown_super() shrink_dcache_for_umount sb->s_root = NULL

| | vfs_read() | inotify_fdinfo() | * 从 mark 获取 inode * | 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)

<省略寄存器,不可靠的跟踪信息>

[ 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 在卸载路径中将 inode->i_sb->s_root 设置为 NULL 之后,对其进行了空指针解引用。

通过在 show_mark_fhandle() 中调用 exportfs_encode_fid() 时使用 s_umount 锁进行保护来修复此问题。

Amir 在 [1] 中建议了这种修复形式。

[1]: https://lore.kernel.org/all/CAOQ4uxhbDwhb+2Brs1UdkoF0a3NSdBAOQPNfEHjahrgoKJpLEw@mail.gmail.com/

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

来源

Do you know our Splunk app?

Download it now for free!