CVE-2026-43120Linux内核的RDMA/irdma驱动组件中存在一个严重的双重释放漏洞。该问题源于在处理内存区域重注册操作时,如果指定了IB_MR_REREG_TRANS标志,驱动会尝试分配新的用户内存区域(umem)。若分配后的后续步骤失败,驱动虽然释放了umem,却未将相关结构体中的region指针置空。这导致错误处理流程返回用户态后,用户程序调用标准的注销接口时,内核会误判指针有效性并再次尝试释放同一块内存,从而触发双重释放。此漏洞可被本地低权限攻击者利用,导致内核崩溃或潜在的权限提升。
漏洞原理在于irdma驱动中rereg_user_mr函数的错误处理逻辑缺陷。当执行irdma_rereg_mr_trans时,若在ib_umem_get分配新内存成功后,后续逻辑(如硬件操作或资源检查)失败,代码进入错误分支释放了刚分配的umem,但未清除iwmr->region指针。攻击者通过构造特定的RDMA应用,触发含有IB_MR_REREG_TRANS的重注册请求并人为制造失败条件(如资源耗尽)。当内核返回错误后,应用调用ibv_dereg_mr。内核的dereg_mr路径检查到iwmr->region不为NULL,便再次调用ib_umem_release。这种“释放后使用”或“双重释放”导致内核堆元数据损坏,攻击者可利用堆喷射等技术覆盖敏感数据,从而实现本地提权或拒绝服务攻击。