From 943dd5941ef5dfb0b35d8a0ba85fd3cbe7d3c7fa Mon Sep 17 00:00:00 2001 From: Chengchang Tang Date: Tue, 11 Mar 2025 08:51:19 +0900 Subject: [PATCH] RDMA/hns: Fix accessing invalid dip_ctx during destroying QP BugLink: https://bugs.launchpad.net/bugs/2101915 [ Upstream commit 0572eccf239ce4bd89bd531767ec5ab20e249290 ] If it fails to modify QP to RTR, dip_ctx will not be attached. And during detroying QP, the invalid dip_ctx pointer will be accessed. Fixes: faa62440a577 ("RDMA/hns: Fix different dgids mapping to the same dip_idx") Signed-off-by: Chengchang Tang Signed-off-by: Junxian Huang Link: https://patch.msgid.link/20241220055249.146943-3-huangjunxian6@hisilicon.com Signed-off-by: Leon Romanovsky Signed-off-by: Sasha Levin (cherry picked from commit a448c775f0aec6cfbee4bda561447c707153504a linux-6.12.y) [koichiroden: follow-up fix from v6.12.9] Signed-off-by: Koichiro Den Signed-off-by: Stefan Bader --- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c index 8b2ac341a4dc..e91f6bfa9808 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c @@ -5559,6 +5559,9 @@ static void put_dip_ctx_idx(struct hns_roce_dev *hr_dev, { struct hns_roce_dip *hr_dip = hr_qp->dip; + if (!hr_dip) + return; + xa_lock(&hr_dev->qp_table.dip_xa); hr_dip->qp_cnt--;