cxl/port:修复释放后使用问题,允许无序解码器关闭(CVE-2024-50226)
CVE编号
CVE-2024-50226利用情况
暂无补丁情况
N/A披露时间
2024-11-09漏洞描述
在Linux内核中,已经解决了一个漏洞,该漏洞涉及到cxl/port模块中的use-after-free问题以及解码器(decoder)关闭顺序不当的问题。在调查初始化失败报告的过程中,对cxl_test进行了更新,以便在模拟根端口/总线设备注册后注册模拟内存设备。然而,这导致了cxl_test在使用后释放(use-after-free)时出现崩溃问题。具体的崩溃信息包括区域建立、解码器注册、目标设置等步骤。在其中一个阶段,两个端点解码器(7.0和14.0)与一个公共的开关解码器(3.0)共享拓扑结构。在拆除阶段,第一个移除的解码器是decoder14.0,它触发了开关解码器的“不按顺序重置”的情况。然而,这导致region3的清理被中止,仍然引用已删除的decoder14.0对象。在第二次尝试拆除region3时,遇到了已经删除的stale decoder14.0对象,导致系统崩溃。该漏洞的修复方案是认识到CXL规范没有强制要求开关解码器的有序关闭。驱动程序强制分配的顺序性,而硬件强制提交的顺序性。因此,与其失败并留下对象悬空,不如始终移除它们。为了支持使cxl_region_decode_reset()始终成功,将cxl_region_invalidate_memregion()的失败转换为警告。在那里崩溃内核是可以的,因为如果无法管理物理地址变异事件(如CXL区域销毁)的缓存,系统完整性将受到威胁。添加了一个新的device_for_each_child_reverse_from()函数,用于在依赖解码器被禁用后清理port->commit_end。换句话说,如果解码器按0->1->2的顺序分配并按1->2->0的顺序禁用,那么只有在2被禁用后,port->commit_end才会从2开始递减,并且由于之前已经禁用了1,它会一直递减到零。解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。受影响软件情况
# | 类型 | 厂商 | 产品 | 版本 | 影响面 | ||||
1 | |||||||||
---|---|---|---|---|---|---|---|---|---|
运行在以下环境 | |||||||||
系统 | debian_11 | linux | * | Up to (excluding) 5.10.226-1 |
- 攻击路径 N/A
- 攻击复杂度 N/A
- 权限要求 N/A
- 影响范围 N/A
- 用户交互 N/A
- 可用性 N/A
- 保密性 N/A
- 完整性 N/A
CWE-ID | 漏洞类型 |
Exp相关链接

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