mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 15:13:44 -04:00
RDMA/rxe: Fix unsafe drain work queue code
If create_qp does not fully succeed it is possible for qp cleanup code to attempt to drain the send or recv work queues before the queues have been created causing a seg fault. This patch checks to see if the queues exist before attempting to drain them. Link: https://lore.kernel.org/r/20230620135519.9365-3-rpearsonhpe@gmail.com Reported-by: syzbot+2da1965168e7dbcba136@syzkaller.appspotmail.com Closes: https://lore.kernel.org/linux-rdma/00000000000012d89205fe7cfe00@google.com/raw Fixes:49dc9c1f0c("RDMA/rxe: Cleanup reset state handling in rxe_resp.c") Fixes:fbdeb828a2("RDMA/rxe: Cleanup error state handling in rxe_comp.c") Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
committed by
Jason Gunthorpe
parent
e0ba8ff467
commit
5993b75d0b
@@ -597,6 +597,10 @@ static void flush_send_queue(struct rxe_qp *qp, bool notify)
|
||||
struct rxe_queue *q = qp->sq.queue;
|
||||
int err;
|
||||
|
||||
/* send queue never got created. nothing to do. */
|
||||
if (!qp->sq.queue)
|
||||
return;
|
||||
|
||||
while ((wqe = queue_head(q, q->type))) {
|
||||
if (notify) {
|
||||
err = flush_send_wqe(qp, wqe);
|
||||
|
||||
@@ -1469,6 +1469,10 @@ static void flush_recv_queue(struct rxe_qp *qp, bool notify)
|
||||
return;
|
||||
}
|
||||
|
||||
/* recv queue not created. nothing to do. */
|
||||
if (!qp->rq.queue)
|
||||
return;
|
||||
|
||||
while ((wqe = queue_head(q, q->type))) {
|
||||
if (notify) {
|
||||
err = flush_recv_wqe(qp, wqe);
|
||||
|
||||
Reference in New Issue
Block a user