btrfs:修复使用相同 fd 时直接 IO 写入和 fsync 之间的竞争问题(CVE-2024-46734)
CVE编号
CVE-2024-46734利用情况
暂无补丁情况
N/A披露时间
2024-09-18漏洞描述
在Linux内核中,已经解决了一个关于btrfs文件系统的问题,具体描述如下:当有两个线程使用相同的文件描述符时,如果一个线程正在进行直接IO写操作,而另一个线程进行fsync操作时,会出现竞态条件。这个竞态条件可能导致以下两种情况:1. 在没有持有inode锁的情况下尝试进行fsync操作,触发断言失败,当断言启用时;2. 因为文件私有指针指向的是直接IO任务栈上分配的内存,所以在fsync任务中可能会出现无效的内存访问,如果栈在fsync任务使用之前被销毁。这个竞态条件的发生过程如下:1. 用户空间程序打开一个文件描述符并使用O_DIRECT标志;2. 程序创建两个线程,例如使用libpthread;3. 其中一个线程使用文件描述符进行直接IO写操作,而另一个线程使用相同的文件描述符调用fsync;4. 在直接IO写操作的线程(任务A)设置文件的私有信息时,另一个fsync的线程(任务B)可能会尝试锁定inode的VFS锁;5. 任务A完成直接IO写操作并解锁inode的VFS锁后,任务B可能已经失败并触发断言错误。具体的错误堆栈跟踪显示了在btrfs_get_ordered_extents_for_logging函数中发生的错误。这是一个内核BUG,需要修复。修复的内容主要是确保在访问相关数据结构时正确地锁定inode的VFS锁,以避免竞态条件导致的错误。解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。- 攻击路径 N/A
- 攻击复杂度 N/A
- 权限要求 N/A
- 影响范围 N/A
- 用户交互 N/A
- 可用性 N/A
- 保密性 N/A
- 完整性 N/A
CWE-ID | 漏洞类型 |
Exp相关链接

版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论