CVE-2026-74631: net: smc: fix splice entry lifetime imbalance in smc_rx_splice
In the Linux kernel, the following vulnerability has been resolved:
net: smc: fix splice entry lifetime imbalance in smcrxsplice
smcrxsplice() passes pages to splicetopipe() before taking the references that cover the lifetime of each splice entry. In the VM-backed RMB path, splicetopipe() may drop unqueued entries through smcrxspdrelease(), while queued entries are released later via the pipe buffer callback.
The old post-splice accounting also derives the number of queued VM pages from an offset mutated while building the descriptor, and a multi-page splice pairs one sockhold() with multiple sockput() calls.
Take the page and socket references for every candidate entry before splicetopipe(), and drop the matching private state, page reference, and socket reference from smcrxspdrelease() for entries that never get queued. This fixes a refcount imbalance that can underflow page refcounts and trigger a use-after-free.
Affected Software
Event History
Frequently Asked Questions
Which systems are exposed to this issue?
Systems running the Linux kernel are affected in the SMC receive splice path. The issue specifically involves the VM-backed RMB path in smc_rx_splice().
What condition can trigger the use-after-free?
The issue can occur when splice_to_pipe() drops splice entries that were not queued, or when a multi-page splice causes reference accounting to pair one socket reference acquisition with multiple releases. The resulting imbalance can underflow page reference counts and trigger a use-after-free.
What is the remediation?
Apply a kernel version containing the referenced fixes. The fix takes page and socket references for each candidate entry before splice_to_pipe() and releases matching references for entries that are not queued.