IB/rdmavt: add lock to call to rvt_error_qp to prevent a race condition
authorNiels Dossche <dossche.niels@gmail.com>
Mon, 28 Feb 2022 16:53:30 +0000 (17:53 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Apr 2022 18:59:18 +0000 (20:59 +0200)
commit92f1947c0d26060e978b3a9f21f32ce7c8c9cca3
tree8509fa340171c09b1ce81b696a9a0b0addd9f32a
parent3b5fd693621bcd0e467f902d508ebd741d10bf75
IB/rdmavt: add lock to call to rvt_error_qp to prevent a race condition

[ Upstream commit 4d809f69695d4e7d1378b3a072fa9aef23123018 ]

The documentation of the function rvt_error_qp says both r_lock and s_lock
need to be held when calling that function.  It also asserts using lockdep
that both of those locks are held.  However, the commit I referenced in
Fixes accidentally makes the call to rvt_error_qp in rvt_ruc_loopback no
longer covered by r_lock.  This results in the lockdep assertion failing
and also possibly in a race condition.

Fixes: d757c60eca9b ("IB/rdmavt: Fix concurrency panics in QP post_send and modify to error")
Link: https://lore.kernel.org/r/20220228165330.41546-1-dossche.niels@gmail.com
Signed-off-by: Niels Dossche <dossche.niels@gmail.com>
Acked-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/sw/rdmavt/qp.c