目标达成 感谢每一位支持者 — 我们达成了 100% 目标!

目标: 1000 元 · 已筹: 1359 元

100%

CVE-2026-98974— XFS 文件系统范围交换到文件末尾大小漏洞

一分钟漏洞结论

影响对象
Linux Linux
利用判断
尚无明确在野利用证据,仍需结合暴露面评估
建议动作
优先检查厂商安全公告和参考链接中的修复版本;无法立即升级时,限制受影响服务暴露并加强监测。

在 Linux 内核中,以下漏洞已得到修复: XFS:修复 exchange-range-to-eof 场景下的文件大小交换问题 Norbert Szetei 提交了一个补丁,其中包含对 XFS_IOC_EXCHANGE_RANGE 操作中 TO_EOF 标志相关缺陷的不完整描述。该漏洞会诱使 exchange-range 机制修改文件,使其在文件末尾(EOF)之后拥有共享的数据块。然而,这是绝对不允许的,因为文件永远不会在 EOF 之后写入数据,而只有已写入的数据块才能被共享。这一错误是导致后续所有异常行为的关键

CVSS 7.8 · High

影响版本矩阵 10

厂商产品 版本范围状态
Linux Linux 966ceafc7a437105ecfe1cadb3747b2965a260ca< b361d32b884f8ddcb9bad5d99b69eece648f8e43 affected
966ceafc7a437105ecfe1cadb3747b2965a260ca< cf32eb20dfacfd2e92ce86ba1fece9ae5f98a7d8 affected
966ceafc7a437105ecfe1cadb3747b2965a260ca< 952b5c99a840c2bff1f6645fd5e06e1db6ec2623 affected
966ceafc7a437105ecfe1cadb3747b2965a260ca< 7dfb218c829c1acb626e0fe92c5fddb9a26a03e9 affected
6.10 affected
< 6.10 unaffected
6.12.114≤ 6.12.* unaffected
6.18.57≤ 6.18.* unaffected
… +2 条更多
获取后续新漏洞提醒 登录后订阅

一、 漏洞 CVE-2026-98974 基础信息

漏洞信息

对漏洞内容有疑问?看看神龙的深度分析是否有帮助!
查看神龙十问 ↗

尽管我们使用了先进的大模型技术,但其输出仍可能包含不准确或过时的信息。神龙努力确保数据的准确性,但请您根据实际情况进行核实和判断。

Vulnerability Title
xfs: fix exchange-range-to-eof file size exchange
来源: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: xfs: fix exchange-range-to-eof file size exchange Norbert Szetei posted a patch containing an incomplete description of a bug in XFS_IOC_EXCHANGE_RANGE's TO_EOF flag. The bug tricks exchange-range into modifying a file so that it has shared blocks starting beyond EOF, which is never allowed because files never have written data beyond EOF, and you can only share written data blocks. This is key to all the incorrect behavior that follows. Eventually I got from Norbert a description of what's going wrong: > Fair. Here it is with physical block numbers, 4k blocks. peer is the file > that gets rewritten and file1 is the one that ends up with the flag > cleared. > > Start, nothing shared: > > peer size 4096 -> [100] > file1 size 12288 -> [200] [201] [202] > donor1 size 4096 -> [300] > donor2 size 4096 -> [400] > > 1. FICLONERANGE peer's block into file1's middle slot: > > peer size 4096 -> [100] > file1 size 12288 -> [200] [100] [202] reflink flag set > ^^^^^ both files own block 100 > > 2. XFS_IOC_EXCHANGE_RANGE file1 against donor1, file1_offset 0, > file2_offset 8192, length 0, TO_EOF. One block is exchanged, and the sizes > are exchanged with it: > > file1 size 4096 -> [200] [100] [300] reflink flag set > ^^^^^^^^^^^ still owned, now past the size > donor1 size 12288 -> [202] > > file1 says it is one block long while it still owns three. Nothing was > unmapped. file2_offset is block 2, so this exchange cannot clear a flag. > > 3. XFS_IOC_EXCHANGE_RANGE file1 against donor2, both offsets 0, length 4096. > By i_disk_size this is two one-block files exchanging everything, so > xmi_can_exchange_reflink_flags() agrees and the flag is cleared: > > file1 size 4096 -> [400] [100] [300] reflink flag CLEARED > donor2 size 4096 -> [200] > > Block 100 is still shared with peer. > > 4. pwrite(file1, 4096, 4096), which is file1's second slot, block 100. > xfs_is_cow_inode(file1) is false, so no CoW: > > peer size 4096 -> [100] same block, new contents > > Block 100 is the only one that matters here. PoC below, it reads a file > called peer in the current directory. The filesystem needs reflink and > exchange-range, which mkfs.xfs 7.x turns on by default. So yes, TO_EOF is screwing up the file size even if it's actually exchanging the data block correctly. The following is the intended behavior of XFS_EXCHANGE_RANGE_TO_EOF, as described by its manpage: "Ignore the length parameter. All bytes in file1_fd from file1_offset to EOF are moved to file2_fd, and file2's size is set to (file2_offset+(file1_length-file1_offset)). Meanwhile, all bytes in file2 from file2_offset to EOF are moved to file1 and file1's size is set to (file1_offset+(file2_length-file2_offset))." In other words, if we only exchange a portion of the file data, then we should only exchange the portion of the file size that relates to the exchanged data. Unfortunately, the code swaps the ondisk file size and the incore file sizes, which is incorrect if the caller passes in a nonzero offset. Having confused the file sizes, the PoC uses a second exchange-range call on what looks like a non-reflinked single-block file. Because the file size is set incorrectly, exchange-range thinks it's exchanging the full contents of two files and clears the reflink flag on the broken file. That enables an extending write of the broken file to rewrite the shared block that's just past EOF. This has become known colloquially as refluxfs. Once the file sizes are set correctly, the second exchange-range no longer thinks that it's doing a full-contents swap, so it won't clear the reflink flag on either of its file arguments. Norbert followed up to an earlier version of this patch with a second complaint about us not handling the i_disk_size state correctly: > The offsets are bounded against the incore i_size but subtracted from > ---truncated---
来源: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
来源: CVE Program / CVE List V5
Vulnerability Type
N/A
来源: CVE Program / CVE List V5

受影响产品

厂商 产品 影响版本 CPE 订阅
Linux Linux 966ceafc7a437105ecfe1cadb3747b2965a260ca ~ b361d32b884f8ddcb9bad5d99b69eece648f8e43 -
Linux Linux 6.10 -

二、漏洞 CVE-2026-98974 的公开POC

# POC 描述 源链接 神龙链接
AI 生成 POC 高级

未找到公开 POC。

登录以生成 AI POC

三、漏洞 CVE-2026-98974 的情报信息

请登录查看更多情报信息。

CVE-2026-98974 补丁与修复 (4)

同批安全公告 · Linux · 2026-10-23 · 共 218 条

CVE-2026-98959 9.8 CRITICAL btrfs 扩展属性替换处理远程代码执行漏洞
CVE-2026-99079 9.8 CRITICAL Mellanox mlx5e 驱动 XSK 缓冲区释放漏洞
CVE-2026-99078 9.8 CRITICAL Mellanox mlx5e MPWQE重试时XSK缓冲区释放漏洞
CVE-2026-98870 8.8 HIGH ksmbd 会话清理时存在通道移除逻辑漏洞
CVE-2026-98988 8.8 HIGH Linux 5.13 命名空间越界漏洞
CVE-2026-99083 8.8 HIGH ksmbd 的 krb5_authenticate() 函数堆越界写漏洞
CVE-2026-99082 8.8 HIGH KVM x86 内存管理漏洞
CVE-2026-98981 8.8 HIGH Linux 内核命名空间 dentry 解挂载前未哈希漏洞
CVE-2026-98980 8.8 HIGH namei 遍历中过度挂载条目信息泄露漏洞
CVE-2026-99042 8.4 HIGH io_uring 24 字节 sockaddr_in6 过滤字段填充漏洞
CVE-2026-98978 8.4 HIGH Linux 命名空间 锁定挂载永不失效漏洞
CVE-2026-99064 8.1 HIGH CIPSO 缓存选项偏移调整漏洞
CVE-2026-98968 8.1 HIGH AMT 中继通用查询远程代码执行漏洞
CVE-2026-98889 7.8 HIGH iwlwifi 驱动调度扫描 IE 大小计算漏洞
CVE-2026-98991 7.8 HIGH Linux 内核队列命名空间挂载通知重复漏洞
CVE-2026-98944 7.8 HIGH Steam HID 注册重构漏洞
CVE-2026-99056 7.8 HIGH strparser 解析器关闭时竞态条件漏洞
CVE-2026-98999 7.8 HIGH Intel Xe DRM 驱动程序链接表项失效漏洞
CVE-2026-99054 7.8 HIGH Linux TIPC 拓扑服务队列资源泄漏漏洞
CVE-2026-99032 7.8 HIGH Linux 内核 SMC 模块 信息泄露漏洞

显示前 20 条,共 218 条。 查看全部 &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2026-98974

暂无评论


发表评论