mm/slub:在 alloc_tagging_slab_free_hook 中添加对 s->flags 的检查(CVE-2024-46789)
CVE编号
CVE-2024-46789利用情况
暂无补丁情况
N/A披露时间
2024-09-18漏洞描述
在Linux内核中,存在一个关于mm/slub模块的漏洞,该漏洞出现在alloc_tagging_slab_free_hook函数中。当启用CONFIG_MEMCG、CONFIG_KFENCE和CONFIG_KMEMLEAK配置选项时,会出现一个警告。这是因为以下调用堆栈发生了问题:mem_pool_alloc -> kmem_cache_alloc_noprof -> slab_alloc_node -> kfence_alloc当kfence分配成功时,slab->obj_exts不会为空,因为在kfence_init_pool中已经为其分配了值。在prepare_slab_obj_exts_hook函数中,我们对s->flags进行了检查,并与SLAB_NO_OBJ_EXT | SLAB_NOLEAKTRACE进行位运算。由于这个检查的存在,alloc_tag_add函数不会被调用,因此ref->ct保持为空。然而,当我们调用mem_pool_free时,由于obj_ext不为空,最终会导致调用alloc_tag_sub场景。这就是警告出现的地方。因此,我们需要在alloc_tagging_slab_free_hook中添加相应的检查。对于__GFP_NO_OBJ_EXT的情况,由于没有特定的使用kfence的场景,所以在alloc_tagging_slab_free_hook中暂时不添加相应的检查。漏洞的具体表现为在释放内存池对象时,由于未正确处理分配标签(alloc tag),导致在尝试访问已释放对象的内存时产生警告。这可能会导致系统不稳定或其他未定义的行为。为了修复这个问题,需要在alloc_tagging_slab_free_hook函数中添加适当的检查和处理逻辑,以确保在释放对象时正确处理分配标签。解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。
参考链接 |
|
---|---|
https://git.kernel.org/stable/c/2d476c86ba4745fcbc912ce4627df4fa80caa9ad | |
https://git.kernel.org/stable/c/ab7ca09520e9c41c219a4427fe0dae24024bfe7f |
- 攻击路径 N/A
- 攻击复杂度 N/A
- 权限要求 N/A
- 影响范围 N/A
- 用户交互 N/A
- 可用性 N/A
- 保密性 N/A
- 完整性 N/A
CWE-ID | 漏洞类型 |
Exp相关链接

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