← Back to CVE List
CVE-2026-90107NVD
Vulnerability Summary
In the Linux kernel, the following vulnerability has been resolved:
net/smc: free pending qentry in smc_llc_flow_stop() before memset
smc_llc_flow_stop() resets a flow struct with a blind memset:
spin_lock_bh(&lgr->llc_flow_lock);
memset(flow, 0, sizeof(*flow));
flow->type = SMC_LLC_FLOW_NONE;
spin_unlock_bh(&lgr->llc_flow_lock);
If flow->qentry is non-NULL at this point the pointer is overwritten without the
allocation being freed, leaking one kmalloc object.
A late-arriving duplicate CONFIRM_LINK or ADD_LINK_CONT message can set
flow->qentry after the legitimate message has been consumed by the waiter via
smc_llc_flow_qentry_clr() (which NULLs the pointer but leaves flow->type
non-zero) but before the flow completes and smc_llc_flow_stop() runs. In that
window the duplicate is stashed into flow->qentry, and then lost when
smc_llc_flow_stop() zeros the struct.
Call smc_llc_flow_qentry_del() inside the lock before the memset.
smc_llc_flow_qentry_del() already checks flow->qentry before freeing, so the
normal case where no entry is pending is a no-op.
net/smc: free pending qentry in smc_llc_flow_stop() before memset
smc_llc_flow_stop() resets a flow struct with a blind memset:
spin_lock_bh(&lgr->llc_flow_lock);
memset(flow, 0, sizeof(*flow));
flow->type = SMC_LLC_FLOW_NONE;
spin_unlock_bh(&lgr->llc_flow_lock);
If flow->qentry is non-NULL at this point the pointer is overwritten without the
allocation being freed, leaking one kmalloc object.
A late-arriving duplicate CONFIRM_LINK or ADD_LINK_CONT message can set
flow->qentry after the legitimate message has been consumed by the waiter via
smc_llc_flow_qentry_clr() (which NULLs the pointer but leaves flow->type
non-zero) but before the flow completes and smc_llc_flow_stop() runs. In that
window the duplicate is stashed into flow->qentry, and then lost when
smc_llc_flow_stop() zeros the struct.
Call smc_llc_flow_qentry_del() inside the lock before the memset.
smc_llc_flow_qentry_del() already checks flow->qentry before freeing, so the
normal case where no entry is pending is a no-op.
Affected & Patched Versions
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < 8e3deb150a5237b672c4579e69a6deb02027dbed
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < 11bc373ee6630709f0c2da2e7860c23d503c9e9d
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < 032aec7d03c9102616b98fea74f8f7145e7f867c
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < 957dba2b8b5aebfe09caa6a6b22b958079082eab
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < f03aa5d36ae3c4068a1c3885146be99aa7fd9307
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < 0879ea157acc1ac6752f6fcb755d1f91a2359238
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < 5ff429dd6725fa6c1e17a4ed0be8ab675f67a98b
- Linux Linux >= 555da9af827d95134656fa459c8f3ece04dd867a and < 5ee0ceddc7785c6dcf4a8107fef01f0414a354f4
- Linux Linux >= 5.8
- Linux Linux 8e3deb150a5237b672c4579e69a6deb02027dbed
- Linux Linux 11bc373ee6630709f0c2da2e7860c23d503c9e9d
- Linux Linux 032aec7d03c9102616b98fea74f8f7145e7f867c
- Linux Linux 957dba2b8b5aebfe09caa6a6b22b958079082eab
- Linux Linux f03aa5d36ae3c4068a1c3885146be99aa7fd9307
- Linux Linux 0879ea157acc1ac6752f6fcb755d1f91a2359238
- Linux Linux 5ff429dd6725fa6c1e17a4ed0be8ab675f67a98b
- Linux Linux 5ee0ceddc7785c6dcf4a8107fef01f0414a354f4
External References
- https://git.kernel.org/stable/c/8e3deb150a5237b672c4579e69a6deb02027dbed
- https://git.kernel.org/stable/c/11bc373ee6630709f0c2da2e7860c23d503c9e9d
- https://git.kernel.org/stable/c/032aec7d03c9102616b98fea74f8f7145e7f867c
- https://git.kernel.org/stable/c/957dba2b8b5aebfe09caa6a6b22b958079082eab
- https://git.kernel.org/stable/c/f03aa5d36ae3c4068a1c3885146be99aa7fd9307
- https://git.kernel.org/stable/c/0879ea157acc1ac6752f6fcb755d1f91a2359238
- https://git.kernel.org/stable/c/5ff429dd6725fa6c1e17a4ed0be8ab675f67a98b
- https://git.kernel.org/stable/c/5ee0ceddc7785c6dcf4a8107fef01f0414a354f4