CVE-2026-31507Linux内核net/smc模块存在一个双重释放漏洞。在处理smc_rx_splice()时,当tee()系统调用复制splice管道缓冲区,由于仅增加页面引用计数而未处理smc_spd_priv指针,导致原始和克隆管道共享同一对象。释放时smc_rx_pipe_buf_release()被调用两次,触发Use-After-Free,进而引发空指针解引用和内核崩溃,可能导致本地提权。
漏洞位于Linux内核的SMC(Shared Memory Communications)协议栈中。smc_rx_splice()分配smc_spd_priv并将其存入pipe_buffer.private。使用tee()复制缓冲区时,generic_pipe_buf_get回调未对smc_spd_priv增加引用计数,导致两个管道缓冲区指向同一对象。当管道关闭时,smc_rx_pipe_buf_release()对同一对象执行两次kfree()和sock_put(),造成Double Free和UAF。KASAN会检测到该问题,并可能因访问已释放的priv->smc指针导致内核空指针引用及panic。