Blob Blame History Raw
From 8bb25f86ea1976bc8dcc009be37e7c779d131811 Mon Sep 17 00:00:00 2001
From: Patrisious Haddad <phaddad@nvidia.com>
Date: Mon, 26 Oct 2020 10:38:13 +0200
Subject: [PATCH] udaddy: Fix create_reply_ah error flow

[ Upstream commit 2213fe559b74d4281f9d42e425dfbd7e0f582a67 ]

Return error in case create_reply_ah() fails to create AH.

Fixes: a7eb7efbf69f ("r8077: Add support for UD QPs to the RDMA CM library, along with a goofy test program")
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
Signed-off-by: Nicolas Morey-Chaisemartin <nmoreychaisemartin@suse.com>
---
 librdmacm/examples/udaddy.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/librdmacm/examples/udaddy.c b/librdmacm/examples/udaddy.c
index 9283caa4971f..9f911289da3c 100644
--- a/librdmacm/examples/udaddy.c
+++ b/librdmacm/examples/udaddy.c
@@ -449,23 +449,27 @@ static void destroy_nodes(void)
 	free(test.nodes);
 }
 
-static void create_reply_ah(struct cmatest_node *node, struct ibv_wc *wc)
+static int create_reply_ah(struct cmatest_node *node, struct ibv_wc *wc)
 {
 	struct ibv_qp_attr attr;
 	struct ibv_qp_init_attr init_attr;
 
 	node->ah = ibv_create_ah_from_wc(node->pd, wc, node->mem,
 					 node->cma_id->port_num);
+	if (!node->ah)
+		return -1;
 	node->remote_qpn = be32toh(wc->imm_data);
 
-	ibv_query_qp(node->cma_id->qp, &attr, IBV_QP_QKEY, &init_attr);
+	if (ibv_query_qp(node->cma_id->qp, &attr, IBV_QP_QKEY, &init_attr))
+		return -1;
 	node->remote_qkey = attr.qkey;
+	return 0;
 }
 
 static int poll_cqs(void)
 {
 	struct ibv_wc wc[8];
-	int done, i, ret;
+	int done, i, ret, rc;
 
 	for (i = 0; i < connections; i++) {
 		if (!test.nodes[i].connected)
@@ -478,8 +482,13 @@ static int poll_cqs(void)
 				return ret;
 			}
 
-			if (ret && !test.nodes[i].ah)
-				create_reply_ah(&test.nodes[i], wc);
+			if (ret && !test.nodes[i].ah) {
+				rc = create_reply_ah(&test.nodes[i], wc);
+				if (rc) {
+					printf("udaddy: failed to create reply AH\n");
+					return rc;
+				}
+			}
 		}
 	}
 	return 0;
-- 
2.25.4