mlxsw: fix refcount leak in mlxsw_sp_vrs_lpm_tree_replace()
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: mlxsw: fix refcount leak in mlxsw_sp_vrs_lpm_tree_replace() When mlxsw_sp_vrs_lpm_tree_replace() fails after replacing some VRs, the error rollback loop does not correctly revert the preceding replacements. The loop decrements the index but fails to update the vr pointer, which still points to the VR that caused the failure. As a result, the condition and the rollback call always operate on the same VR, potentially calling mlxsw_sp_vr_lpm_tree_replace() multiple times on it while never rolling back the earlier VRs. Those VRs continue to hold a reference to new_tree acquired via mlxsw_sp_lpm_tree_hold(), leaking the reference count of new_tree. Fix by reinitializing vr inside the error loop with the updated index: vr = &mlxsw_sp->router->vrs[i]; so that the loop correctly iterates over all VRs that were actually replaced.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
Version range not reported
- Linux Linux
4.14
References 8
git.kernel.org
- stable/c/c2c75c45b54f3b12eafb28a4eb47f8821512c1aa
- stable/c/7203ac71d3895fa5948b319dd724f0e1cffbc4a1
- stable/c/f6454a5fbf2224ad30ec70e686a6c592561da1f2
- stable/c/220d41bdce41fe5a39a7f419faab1e907b4093c2
- stable/c/9e4a6185679922305ea1df68403f00ccc512656b
- stable/c/3a2b47d1b4b3de54d030a7fdb6a322c970513ee3
- stable/c/8adebf07b46df79a0e49a6d4ae384f0db7c91db6
- stable/c/21cf8dc478a49e8de039c2739b1646a774cb1944