CVE-2026-89798 in Linux
摘要
由 VulDB • 2026-09-16
在 Linux 内核中,已修复以下漏洞:
rpcrdma: 在发布通知之前设置 rn_done
rpcrdma_rn_register() 在使用 xa_alloc() 将 @rn 插入 rd_xa 之后,才存储调用者的回调函数至 rn->rn_done。xarray 使得 rpcrdma_remove_one() 能够访问到 @rn,该函数会遍历 rd_xa 并为每个已注册的通知调用 rn->rn_done(rn)。如果设备移除操作与新的注册发生竞态条件(race condition),则可能会观察到 rn_done 仍为 NULL 的 @rn。这是因为通知对象由其所有者进行零初始化(zero allocated),从而导致通过空指针函数调用引发问题。
应在 xa_alloc() 发布 @rn 之前存储 rn->rn_done。xarray 的存储端和加载端的顺序保证,任何在 rd_xa 中找到 @rn 的 CPU 也能观察到已设置的回调函数。
rpcrdma_rn_unregister() 将非 NULL 的 rn_done 视为注册完成的哨兵值,因此早期设置的操作不能在注册失败时保留下来。当 xa_alloc() 失败时,需再次清除 rn_done。如果未进行此操作,失败的接受清理路径将在从未插入的 @rn 上调用 rpcrdma_rn_unregister(),从而擦除一个不相关的 rd_xa 槽位并导致 rd_kref 下溢(underflow)。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.