secretmem:如果 arch 无法设置直接映射,则禁用 memfd_secret() (CVE-2024-50182)
CVE编号
CVE-2024-50182利用情况
暂无补丁情况
N/A披露时间
2024-11-08漏洞描述
在Linux内核中,已经解决了以下漏洞:如果架构无法设置直接映射,将禁用memfd_secret()。如果无法设置直接映射(can_set_direct_map()返回false),则从memfd_secret()系统调用返回-ENOSYS错误。这在某些arm64配置中就是这种情况,在这些配置中,如果直接映射首先以4k粒度进行设置,则可以在直接映射中标记4k PTEs为非存在状态(这符合ARM的先破坏后创建的语义,不容易拆分大/巨页)。更具体地说,在arm64系统上,如果无法设置直接映射(can_set_direct_map()返回false),则set_direct_map_invalid_noflush()不执行任何操作,但它仍然返回成功(0)而不是错误。这意味着memfd_secret似乎“工作正常”(例如,系统调用成功,你可以映射文件描述符并在页面中出现故障),但它实际上并没有实现从直接映射中删除其内存的目标。请注意,通过这个补丁,当can_set_direct_map()返回false时,memfd_secret()将开始报错(例如,在arm64上,当启用CONFIG_RODATA_FULL_DEFAULT_ENABLED=n、CONFIG_DEBUG_PAGEALLOC=n和CONFIG_KFENCE=n时)。但这仍然比目前的静默失败更好。由于CONFIG_RODATA_FULL_DEFAULT_ENABLED默认为'y',因此大多数arm64系统实际上拥有工作的memfd_secret()并不会受到影响。从最初的memfd_secret补丁系列的迭代过程中可以看出,在这些情况下禁用系统调用是预期的行为(相对于让set_direct_map_invalid_noflush返回错误,后者将在页面错误时间导致SIGBUS),但是在v16和v17之间检查它时被遗漏了,当时secretmem移开了CMA分配。相关链接:[1](https://lore.kernel.org/lkml/[email protected]/)、[2](https://lore.kernel.org/lkml/[email protected]/#t)、[3](https://lore.kernel.org/lkml/[email protected]/)。解决建议
"将组件 Linux 升级至 5.14 及以上版本"受影响软件情况
# | 类型 | 厂商 | 产品 | 版本 | 影响面 | ||||
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相关链接

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