From nobody Sat Jul 25 21:59:21 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7134C3A451F; Mon, 13 Jul 2026 08:10:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783930253; cv=none; b=sJ+88PP/YjM3GlPMHOCNSdlHFK7D8q5JC7w97GnSTS4K3zn0dKupgE7igkJlRGg2rq0oF7vuvQvHXHcr4+l/Defd0LNeU6fWXGqd7sgDmVQ0UlKsxN5UQ8SVdyz2gzrRDrjzVgKD2ezcIS6QH0Q6WZuwyefiYweM+InG2V1l0ng= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783930253; c=relaxed/simple; bh=2wtDl9cqWSxofQC4HOGj+8Dirun9oX2QGYc6g148Ee0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oZu6ob/r9K1I2eRudBwVzzWAe3JN/6/1SWkXwxn/Aipec+mOlxo3X0+6DxVvlGJBRIs/Tr6R+9bHteSkgerPw/B6UKEFJcyOXQpZC9iiDe63K2/ataOLJWUz1wHSaIO/tmhzTEQ6g0O+XfCzN+3dVZWZwjJ3hfwOs/IyAeHBqZQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JPe6aFAF; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JPe6aFAF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 10B6D1F000E9; Mon, 13 Jul 2026 08:10:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783930250; bh=oYl/ZCPb2/1UsGJ1CvAgoDwa/0oNbO5jCw1ejkSPLVc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JPe6aFAFUOqsRM0MK+OKaDEb5zbVQQeAgSHqxIIvUqZm2azyiERR88nc47ahbStV1 xLfhTIuRFY5CP68CasglWu+IF7zz2KxtJ8hrVmoLG9p+0sZy8/hEnfpDeZzU4JGIVs 6N2KSMuYywlycR/pfvNYoizRpcx3+bnVprDXusrQIWkh4P8UCHSKIgDo0p3ohwVSw/ CT+jjWyX8Eu9W/a4+/pJ/gngOohTOnYUdXhpwDFu6XtZxTO8a0K0ysY2Sz57P2Dhwn zVoTBb6a4RbNl0gz6zeBP7Op0sABpkhywj2QZ/ki683LYcwi0R01N0f7MMwLRxJaRi yDl81ZE5x0Y2Q== From: Leon Romanovsky To: Selvin Xavier , Kalesh AP , Jason Gunthorpe , Leon Romanovsky , Michael Margolin , Gal Pressman , Yossi Leybovich , Cheng Xu , Kai Shen , Chengchang Tang , Junxian Huang , Tatyana Nikolova , Long Li , Konstantin Taranov , Yishai Hadas , Michal Kalderon , Nelson Escobar , Satish Kharat , Bernard Metzler Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org Subject: [PATCH rdma-next 1/2] RDMA/bnxt_re: Validate udata before destroying resources Date: Mon, 13 Jul 2026 11:10:34 +0300 Message-ID: <20260713-fix-destroy-no-udata-v1-1-fcca2e34fd57@nvidia.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713-fix-destroy-no-udata-v1-0-fcca2e34fd57@nvidia.com> References: <20260713-fix-destroy-no-udata-v1-0-fcca2e34fd57@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.15-dev-18f8f Content-Transfer-Encoding: quoted-printable From: Leon Romanovsky The destroy callbacks currently zero the udata output after tearing down their resources. If that userspace access fails, uverbs preserves the uobject and permits the destroy callback to be entered again even though the driver resource has already been released. Use ib_no_udata_io() before teardown so all udata failures occur while the resource is still intact, then return success after teardown completes. Fixes: bed686d8dcd4 ("RDMA/bnxt_re: Use ib_respond_empty_udata()") Signed-off-by: Leon Romanovsky Acked-by: Selvin Xavier Reviewed-by: Jacob Moroni --- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/= hw/bnxt_re/ib_verbs.c index 565762529007..ef9943be1886 100644 --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c @@ -695,7 +695,7 @@ int bnxt_re_dealloc_pd(struct ib_pd *ib_pd, struct ib_u= data *udata) struct bnxt_re_dev *rdev =3D pd->rdev; int ret; =20 - ret =3D ib_is_udata_in_empty(udata); + ret =3D ib_no_udata_io(udata); if (ret) return ret; =20 @@ -712,7 +712,7 @@ int bnxt_re_dealloc_pd(struct ib_pd *ib_pd, struct ib_u= data *udata) &pd->qplib_pd)) atomic_dec(&rdev->stats.res.pd_count); } - return ib_respond_empty_udata(udata); + return 0; } =20 int bnxt_re_alloc_pd(struct ib_pd *ibpd, struct ib_udata *udata) @@ -1015,7 +1015,7 @@ int bnxt_re_destroy_qp(struct ib_qp *ib_qp, struct ib= _udata *udata) unsigned int flags; int rc; =20 - rc =3D ib_is_udata_in_empty(udata); + rc =3D ib_no_udata_io(udata); if (rc) return rc; =20 @@ -1064,7 +1064,7 @@ int bnxt_re_destroy_qp(struct ib_qp *ib_qp, struct ib= _udata *udata) if (scq_nq !=3D rcq_nq) bnxt_re_synchronize_nq(rcq_nq); =20 - return ib_respond_empty_udata(udata); + return 0; } =20 static u8 __from_ib_qp_type(enum ib_qp_type type) @@ -2148,7 +2148,7 @@ int bnxt_re_destroy_srq(struct ib_srq *ib_srq, struct= ib_udata *udata) struct bnxt_qplib_srq *qplib_srq =3D &srq->qplib_srq; int ret; =20 - ret =3D ib_is_udata_in_empty(udata); + ret =3D ib_no_udata_io(udata); if (ret) return ret; =20 @@ -2159,7 +2159,7 @@ int bnxt_re_destroy_srq(struct ib_srq *ib_srq, struct= ib_udata *udata) free_page((unsigned long)srq->uctx_srq_page); ib_umem_release(srq->umem); atomic_dec(&rdev->stats.res.srq_count); - return ib_respond_empty_udata(udata); + return 0; } =20 static int bnxt_re_init_user_srq(struct bnxt_re_dev *rdev, @@ -3471,7 +3471,7 @@ int bnxt_re_destroy_cq(struct ib_cq *ib_cq, struct ib= _udata *udata) nq =3D cq->qplib_cq.nq; cctx =3D rdev->chip_ctx; =20 - ret =3D ib_is_udata_in_empty(udata); + ret =3D ib_no_udata_io(udata); if (ret) return ret; =20 @@ -3486,7 +3486,7 @@ int bnxt_re_destroy_cq(struct ib_cq *ib_cq, struct ib= _udata *udata) atomic_dec(&rdev->stats.res.cq_count); kfree(cq->cql); ib_umem_release(cq->umem); - return ib_respond_empty_udata(udata); + return 0; } =20 int bnxt_re_create_user_cq(struct ib_cq *ibcq, const struct ib_cq_init_att= r *attr, @@ -4449,7 +4449,7 @@ int bnxt_re_dereg_mr(struct ib_mr *ib_mr, struct ib_u= data *udata) struct bnxt_re_dev *rdev =3D mr->rdev; int rc; =20 - rc =3D ib_is_udata_in_empty(udata); + rc =3D ib_no_udata_io(udata); if (rc) return rc; =20 @@ -4472,7 +4472,7 @@ int bnxt_re_dereg_mr(struct ib_mr *ib_mr, struct ib_u= data *udata) atomic_dec(&rdev->stats.res.mr_count); if (rc) return rc; - return ib_respond_empty_udata(udata); + return 0; } =20 static int bnxt_re_set_page(struct ib_mr *ib_mr, u64 addr) --=20 2.54.0 From nobody Sat Jul 25 21:59:21 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 370B83A6F04; Mon, 13 Jul 2026 08:10:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783930256; cv=none; b=FyNFiYwE0w38u7syP8Xquu7Po20GU28D00rtW/HC1dofSUHDPLrBJgH5UvNwWwqCsA5uy730Idx6Lokr2Y7EPOgS5g4d3Kb8vf6XYiin3YVqDge3Pu9IS3Xii1V0JGUcx1z16F5q2g84s+EDBwujVjpxPGYopmHpve1ItOLdqPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783930256; c=relaxed/simple; bh=McIFbCg2zkYhIbi7Sf6g7Cze8xlsHm6rtHQ9D/28WxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=LuFoRtNmlNPEwNPcH9aPYLpEpgNsO934Tm39Upx4fzIYTBCyUEhfdBnywuUT4iJDEhoTVOKrmVFoxalh32fLvJ87KCc39KaW+Zs1GSrxQXDJREINkSkpgE2K76wA/B0XBPQyKxr1iuUTzO9pVSr3Ml1h63a2r7bxPPJEwM3KsGg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cPCFPiyT; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cPCFPiyT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 173AC1F00A3A; Mon, 13 Jul 2026 08:10:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783930254; bh=PNYc1DoMQUM6xfsQBKIi+6tgb3rpEJmTR8uGibIZoN0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cPCFPiyTAyfDEVKOfxbxnv+hHgjlxS9Es7rEiv/cGaQUzs77n1rFgAKoJ3KzcXMCH nqjXi572umghPLMwVOIlgZNzH4IdaD72sBsfZKKsKYXzyMt+wDiOMtiITFZioH4OlD CKau+O/6PZ2zoxYYebiPoyUm7kg284dEVG7WQQN+a3wmJkp+S5w+vAObsmdotO49c1 I/11RC3c50+wPfIFgiH6Q4YOH0OCCSxYnE3CR/8KQ6TyY0KyaPeWcVaXUm/YGQmw7D fAIUHaMxRzMoI77JpirdQCEtKL+1rxZcczoNA6FoWIFwBjx7Tg9AMlo0bGZEtEd25N ZJ8k/LL+JCswg== From: Leon Romanovsky To: Selvin Xavier , Kalesh AP , Jason Gunthorpe , Leon Romanovsky , Michael Margolin , Gal Pressman , Yossi Leybovich , Cheng Xu , Kai Shen , Chengchang Tang , Junxian Huang , Tatyana Nikolova , Long Li , Konstantin Taranov , Yishai Hadas , Michal Kalderon , Nelson Escobar , Satish Kharat , Bernard Metzler Cc: linux-rdma@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org Subject: [PATCH rdma-next 2/2] RDMA: Remove redundant memset() from query_device callbacks Date: Mon, 13 Jul 2026 11:10:35 +0300 Message-ID: <20260713-fix-destroy-no-udata-v1-2-fcca2e34fd57@nvidia.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260713-fix-destroy-no-udata-v1-0-fcca2e34fd57@nvidia.com> References: <20260713-fix-destroy-no-udata-v1-0-fcca2e34fd57@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.15-dev-18f8f Content-Transfer-Encoding: quoted-printable From: Leon Romanovsky The core always hands the driver's query_device() callback a zeroed ib_device_attr. There are only two callers of the op and both clear the structure before invoking it: setup_device() memsets &device->attrs, and ib_uverbs_ex_query_device() passes an on-stack structure initialized to {}. The open-coded memset(props, 0, sizeof(*props)) at the top of the driver callbacks is therefore redundant. Remove it from all drivers. Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/bnxt_re/ib_verbs.c | 1 - drivers/infiniband/hw/efa/efa_verbs.c | 1 - drivers/infiniband/hw/erdma/erdma_verbs.c | 2 -- drivers/infiniband/hw/hns/hns_roce_main.c | 2 -- drivers/infiniband/hw/irdma/verbs.c | 1 - drivers/infiniband/hw/mana/main.c | 1 - drivers/infiniband/hw/mlx4/main.c | 2 -- drivers/infiniband/hw/mlx5/main.c | 1 - drivers/infiniband/hw/mthca/mthca_provider.c | 2 -- drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 1 - drivers/infiniband/hw/qedr/verbs.c | 2 -- drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 1 - drivers/infiniband/sw/siw/siw_verbs.c | 2 -- 13 files changed, 19 deletions(-) diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/= hw/bnxt_re/ib_verbs.c index ef9943be1886..1f32537dc528 100644 --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c @@ -193,7 +193,6 @@ int bnxt_re_query_device(struct ib_device *ibdev, if (rc) return rc; =20 - memset(ib_attr, 0, sizeof(*ib_attr)); memcpy(&ib_attr->fw_ver, dev_attr->fw_ver, min(sizeof(dev_attr->fw_ver), sizeof(ib_attr->fw_ver))); diff --git a/drivers/infiniband/hw/efa/efa_verbs.c b/drivers/infiniband/hw/= efa/efa_verbs.c index ec124fbda637..6be8ec53dcb3 100644 --- a/drivers/infiniband/hw/efa/efa_verbs.c +++ b/drivers/infiniband/hw/efa/efa_verbs.c @@ -222,7 +222,6 @@ int efa_query_device(struct ib_device *ibdev, =20 dev_attr =3D &dev->dev_attr; =20 - memset(props, 0, sizeof(*props)); props->max_mr_size =3D dev_attr->max_mr_pages * PAGE_SIZE; props->page_size_cap =3D dev_attr->page_size_cap; props->vendor_id =3D dev->pdev->vendor; diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c b/drivers/infiniband= /hw/erdma/erdma_verbs.c index 74afe6eb18b0..9491cbab69b3 100644 --- a/drivers/infiniband/hw/erdma/erdma_verbs.c +++ b/drivers/infiniband/hw/erdma/erdma_verbs.c @@ -324,8 +324,6 @@ int erdma_query_device(struct ib_device *ibdev, struct = ib_device_attr *attr, if (err) return err; =20 - memset(attr, 0, sizeof(*attr)); - attr->max_mr_size =3D dev->attrs.max_mr_size; attr->vendor_id =3D PCI_VENDOR_ID_ALIBABA; attr->vendor_part_id =3D dev->pdev->device; diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband= /hw/hns/hns_roce_main.c index c6f633bd5a34..09c07de5f022 100644 --- a/drivers/infiniband/hw/hns/hns_roce_main.c +++ b/drivers/infiniband/hw/hns/hns_roce_main.c @@ -227,8 +227,6 @@ static int hns_roce_query_device(struct ib_device *ib_d= ev, if (ret) return ret; =20 - memset(props, 0, sizeof(*props)); - props->fw_ver =3D hr_dev->caps.fw_ver; props->sys_image_guid =3D cpu_to_be64(hr_dev->sys_image_guid); props->max_mr_size =3D (u64)(~(0ULL)); diff --git a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/ir= dma/verbs.c index 5c907ffce99b..c9b606cc67d4 100644 --- a/drivers/infiniband/hw/irdma/verbs.c +++ b/drivers/infiniband/hw/irdma/verbs.c @@ -22,7 +22,6 @@ static int irdma_query_device(struct ib_device *ibdev, if (err) return err; =20 - memset(props, 0, sizeof(*props)); addrconf_addr_eui48((u8 *)&props->sys_image_guid, iwdev->netdev->dev_addr); props->fw_ver =3D (u64)irdma_fw_major_ver(&rf->sc_dev) << 32 | diff --git a/drivers/infiniband/hw/mana/main.c b/drivers/infiniband/hw/mana= /main.c index efe2935bda29..a5b3606a1dd5 100644 --- a/drivers/infiniband/hw/mana/main.c +++ b/drivers/infiniband/hw/mana/main.c @@ -579,7 +579,6 @@ int mana_ib_query_device(struct ib_device *ibdev, struc= t ib_device_attr *props, if (err) return err; =20 - memset(props, 0, sizeof(*props)); props->vendor_id =3D pdev->vendor; props->vendor_part_id =3D dev->gdma_dev->dev_id.type; props->max_mr_size =3D MANA_IB_MAX_MR_SIZE; diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4= /main.c index 17073e8f105a..7266a6141944 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c @@ -471,8 +471,6 @@ static int mlx4_ib_query_device(struct ib_device *ibdev, if (err) goto out; =20 - memset(props, 0, sizeof *props); - have_ib_ports =3D num_ib_ports(dev->dev); =20 props->fw_ver =3D dev->dev->caps.fw_ver; diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5= /main.c index 02809114fc79..e8bba5a76d4e 100644 --- a/drivers/infiniband/hw/mlx5/main.c +++ b/drivers/infiniband/hw/mlx5/main.c @@ -969,7 +969,6 @@ static int mlx5_ib_query_device(struct ib_device *ibdev, if (err) return err; =20 - memset(props, 0, sizeof(*props)); err =3D mlx5_query_system_image_guid(ibdev, &props->sys_image_guid); if (err) diff --git a/drivers/infiniband/hw/mthca/mthca_provider.c b/drivers/infinib= and/hw/mthca/mthca_provider.c index f90f67afc8fa..e933a53779a4 100644 --- a/drivers/infiniband/hw/mthca/mthca_provider.c +++ b/drivers/infiniband/hw/mthca/mthca_provider.c @@ -69,8 +69,6 @@ static int mthca_query_device(struct ib_device *ibdev, st= ruct ib_device_attr *pr goto out; } =20 - memset(props, 0, sizeof *props); - props->fw_ver =3D mdev->fw_ver; =20 ib_init_query_mad(in_mad); diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniba= nd/hw/ocrdma/ocrdma_verbs.c index 53ba32d168a1..de83dc0ea79c 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c @@ -74,7 +74,6 @@ int ocrdma_query_device(struct ib_device *ibdev, struct i= b_device_attr *attr, if (err) return err; =20 - memset(attr, 0, sizeof *attr); memcpy(&attr->fw_ver, &dev->attr.fw_ver[0], min(sizeof(dev->attr.fw_ver), sizeof(attr->fw_ver))); addrconf_addr_eui48((u8 *)&attr->sys_image_guid, diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qed= r/verbs.c index d5416b161340..1cf502579ad1 100644 --- a/drivers/infiniband/hw/qedr/verbs.c +++ b/drivers/infiniband/hw/qedr/verbs.c @@ -118,8 +118,6 @@ int qedr_query_device(struct ib_device *ibdev, if (rc) return rc; =20 - memset(attr, 0, sizeof(*attr)); - attr->fw_ver =3D qattr->fw_ver; attr->sys_image_guid =3D qattr->sys_image_guid; attr->max_mr_size =3D qattr->max_mr_size; diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infinib= and/hw/usnic/usnic_ib_verbs.c index dc355b00f61c..3402c84eb904 100644 --- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c +++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c @@ -284,7 +284,6 @@ int usnic_ib_query_device(struct ib_device *ibdev, =20 mutex_lock(&us_ibdev->usdev_lock); us_ibdev->netdev->ethtool_ops->get_drvinfo(us_ibdev->netdev, &info); - memset(props, 0, sizeof(*props)); usnic_mac_ip_to_gid(us_ibdev->ufdev->mac, us_ibdev->ufdev->inaddr, &gid.raw[0]); memcpy(&props->sys_image_guid, &gid.global.interface_id, diff --git a/drivers/infiniband/sw/siw/siw_verbs.c b/drivers/infiniband/sw/= siw/siw_verbs.c index b74ac85c1b8b..e281517fc6f9 100644 --- a/drivers/infiniband/sw/siw/siw_verbs.c +++ b/drivers/infiniband/sw/siw/siw_verbs.c @@ -136,8 +136,6 @@ int siw_query_device(struct ib_device *base_dev, struct= ib_device_attr *attr, if (rv) return rv; =20 - memset(attr, 0, sizeof(*attr)); - /* Revisit atomic caps if RFC 7306 gets supported */ attr->atomic_cap =3D 0; attr->device_cap_flags =3D IB_DEVICE_MEM_MGT_EXTENSIONS; --=20 2.54.0