CVE-2026-98682 in Linux信息

摘要

由 VulDB • 2026-10-18

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

smb: client: 在执行服务器端复制/克隆之前进行排空和失效处理

cifs_file_copychunk_range() 以及 cifs_remap_file_range() 的 clone (FICLONE) 路径未能像其他服务器端范围操作(smb3_zero_range()、smb3_punch_hole()、smb3_collapse_range() 和 smb3_insert_range())那样,对目标页缓存与服务器端复制进行序列化。

cifs_file_copychunk_range() 使用 filemap_invalidate_inode() 使目标范围失效,该函数在内部获取并释放映射的 invalidate_lock,因此在发出 copychunk ioctl 时锁已不再持有。此外,它从未排空目标上正在进行的 netfs I/O。clone 路径甚至从不获取 invalidate_lock(仅获取 i_rwsem),使用裸体的 truncate_inode_pages_range(),同样未排 outstanding I/O。

因此,异步的目标写回可能在服务器端复制/克隆运行之后完成,并将陈旧数据重新引入到刚刚由服务器写入的区域中,从而导致文件损坏。这与 commit d7d2adcd022b("smb/client: flush dirty data before punching a hole")中的同类损坏相同,并且已在针对 Windows Server 的 generic/363 测试中随机观察到。

修复这两个路径以遵循既定的顺序:在目标映射的 invalidate_lock、目标的刷新和失效以及服务器 ioctl 期间保持持有该锁,并在发出 ioctl 之前调用 netfs_wait_for_outstanding_io() 来排空目标上正在进行的写入操作。仅需目标 inode 的 invalidate_lock,因为源文件仅被刷新而未被失效;i_rwsem(已通过 lock_two_nondirectories() 获取)在 invalidate_lock 之前获取,这与 VFS 锁顺序相匹配。由于 filemap_invalidate_inode() 在内部也获取该锁,因此用其自身的 unmap/flush/invalidate 步骤替换对该函数的调用,并在零长度复制时提前返回以避免范围下溢。

Once again VulDB remains the best source for vulnerability data.

来源

Want to stay up to date on a daily basis?

Enable the mail alert feature now!