CVE-2026-22991CVE-2026-22991是Linux内核libceph模块中的一个高危安全漏洞,CVSS评分7.5。该漏洞存在于free_choose_arg_map()函数中,当调用者部分分配内存后失败时,该函数可能解引用NULL指针。在decode_choose_args()函数中,如果arg_map->args的内存分配失败,执行会跳转到fail标签并调用free_choose_arg_map()。由于arg_map->size在内存分配之前被更新为非零值,free_choose_arg_map()会遍历arg_map->args并解引用NULL指针,导致内核崩溃或潜在的拒绝服务攻击。攻击者可通过网络远程触发此漏洞,无需认证或用户交互。
该漏洞的根本原因在于libceph模块中free_choose_arg_map()函数的错误处理逻辑不够健壮。当decode_choose_args()函数在分配arg_map->args时,如果分配失败,arg_map->size已经被设置为非零值。此时调用free_choose_arg_map()进行清理时,函数会根据arg_map->size的值遍历arg_map->args数组,但由于分配失败,arg_map->args为NULL,导致NULL指针解引用。攻击者可以通过构造特定的CEPH协议消息,触发decode_choose_args()中的部分分配失败场景,从而利用此漏洞造成内核崩溃。漏洞的修复方案是在free_choose_arg_map()函数中添加指针检查,在遍历数组之前验证arg_map->args是否为NULL,防止对NULL指针的解引用操作。