RDMA/siw: Clear association under lock if siw_qp_modify fails in siw_accept
- 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
- Fix
- Fixed in 5.10.271, 5.15.222, 6.1.189, 6.6.158, 6.12.112, and 2 more
- 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: RDMA/siw: Clear association under lock if siw_qp_modify fails in siw_accept We need to clear cep before release state_lock as siw_qp_llp_close and siw_qp_modify->siw_qp_llp_close did. Otherwise if siw_qp_modify() fails in siw_accept(), the QP's state_lock is released before the error path cleanup. A concurrent ibv_modify_qp() transitioning the QP to ERROR can race in this window: siw_accept() ibv_modify_qp(ERROR) ---------------------- ---------------------- siw_qp_modify() fails up_write(&qp->state_lock) down_write(&qp->state_lock) nextstate_from_idle(): if (qp->cep) siw_cep_put(qp->cep) <- frees cep qp->cep = NULL goto error cep->qp = NULL <- UAF Clear qp->cep and drop the association reference taken by siw_cep_get(), all under the write lock held from the initial down_write(&qp->state_lock). Thread B therefore sees qp->cep == NULL, skips its own put, and cannot free the cep before siw_accept() is done with it.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in f11e09fe2fc3a11ccdf8f932b68181b0bb1d2078; From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in e3f039082856adab7e195dea1af45d93dd6a3f1c; From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in ad50d19f3d1ce052b3a146143581e930a1efb33e; From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in 030306bbb9273af80f14d7af20129661964cd9a7; From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in df2584750314336edcbcc21fb388e04b260f35b7; From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in 9dcc0f4e488b70cff81e0e5717a498c929cf5de3; From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in bfdc744bf20ae4c3ef2e470298de5237c5c9a13c; From 6c52fdc244b5ccc468006fd65a504d4ee33743c7 · fixed in 32cd87f54dd1070020e664ccb0312a9f0fea79b4
- Linux Linux
5.3
- KernelLinux
From 5.3.0 · fixed in 5.10.271; From 5.11.0 · fixed in 5.15.222; From 5.16.0 · fixed in 6.1.189; From 6.2.0 · fixed in 6.6.158; From 6.7.0 · fixed in 6.12.112; From 6.13.0 · fixed in 6.18.54; From 6.19.0 · fixed in 7.2.8
References 8
git.kernel.org
- stable/c/f11e09fe2fc3a11ccdf8f932b68181b0bb1d2078
- stable/c/e3f039082856adab7e195dea1af45d93dd6a3f1c
- stable/c/ad50d19f3d1ce052b3a146143581e930a1efb33e
- stable/c/030306bbb9273af80f14d7af20129661964cd9a7
- stable/c/df2584750314336edcbcc21fb388e04b260f35b7
- stable/c/9dcc0f4e488b70cff81e0e5717a498c929cf5de3
- stable/c/bfdc744bf20ae4c3ef2e470298de5237c5c9a13c
- stable/c/32cd87f54dd1070020e664ccb0312a9f0fea79b4