fork:如果发生错误,请勿在 fork 上调用 uffd(CVE-2024-50220)
CVE编号
CVE-2024-50220利用情况
暂无补丁情况
N/A披露时间
2024-11-09漏洞描述
在Linux内核中,已经解决了一个漏洞:在fork操作中,如果发生错误,则不要调用uffd。修复系列为“fork:在fork时不要暴露不完全的mm”。在fork过程中,我们可能会将虚拟内存地址空间置于一个不一致的状态,直到fork操作完成。此外,在fork操作过程中可能会遇到错误,表明虚拟内存地址空间无效。因此,我们不应该以任何方式将其暴露给可能与mm或VMAs交互的外部设备,这些设备并非设计用来处理不完整的状态。我们特别更新了fork逻辑,将khugepaged和ksm推迟到操作末尾,只有在没有错误的情况下才调用它们,并在发生错误的情况下禁止uffd观察fork事件。这个补丁(之二)的内容是:目前在fork中,如果uffd在VMAs中注册,我们无条件地暴露进程的虚拟地址空间给用户空间,无论fork过程中是否出现错误。这是在dup_userfaultfd_complete()中执行的,无论是否出现错误都会无条件调用此函数,它执行两项职责:通过dup_fctx()调用注册的处理程序来处理UFFD_EVENT_FORK事件,并清理在dup_userfaultfd()中建立的userfaultfd_fork_ctx对象。这是有问题的,因为在出现错误时虚拟地址空间可能尚未正确初始化。提交d24062914837(“fork:使用__mt_dup()复制dup_mmap()中的maple树”)中的更改使得这个问题更加紧迫,因为我们可能处于一个maple树中的条目尚未一致的状态。我们通过确保在fork错误时回滚状态来解决这个问题,这些状态本来会通过用户空间处理的事件来清理。我们还通过实现一个新的函数dup_userfaultfd_fail()来完成这项任务,该函数执行相同的循环,但只递减引用计数。请注意,我们对父mm和子mm执行mmgrab(),但userfaultfd_ctx_put()会在引用计数降至零时执行mmdrop(),因此我们将正确地避免内存泄漏。解决建议
"将组件 Linux 升级至 6.8 及以上版本"
参考链接 |
|
---|---|
https://git.kernel.org/stable/c/92b472945dbf8abc020e9259c0088026f7027dfc | |
https://git.kernel.org/stable/c/f64e67e5d3a45a4a04286c47afade4b518acd47b |
受影响软件情况
# | 类型 | 厂商 | 产品 | 版本 | 影响面 | ||||
1 | |||||||||
---|---|---|---|---|---|---|---|---|---|
运行在以下环境 | |||||||||
系统 | debian_11 | linux | * | Up to (excluding) 5.10.226-1 | |||||
运行在以下环境 | |||||||||
系统 | debian_12 | linux | * | Up to (excluding) 6.1.115-1 |
- 攻击路径 N/A
- 攻击复杂度 N/A
- 权限要求 N/A
- 影响范围 N/A
- 用户交互 N/A
- 可用性 N/A
- 保密性 N/A
- 完整性 N/A
CWE-ID | 漏洞类型 |
Exp相关链接

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