From 854383198b6f02d85b4209a8e7dd7e7c0c118793 Mon Sep 17 00:00:00 2001 From: Humble Devassy Chirammal Date: Thu, 5 Mar 2015 17:28:08 +0530 Subject: rdma: 'list','wr' and 'new' memory has to be verified. Change-Id: I29a8825107b8f4cefe4f4c59296e98fe675ee943 BUG: 1199053 Signed-off-by: Humble Devassy Chirammal Reviewed-on: http://review.gluster.org/9811 Reviewed-by: mohammed rafi kc Tested-by: Gluster Build System Reviewed-by: Raghavendra G Tested-by: Raghavendra G --- rpc/rpc-transport/rdma/src/rdma.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'rpc') diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c index 020974865dc..edfcb2a35e7 100644 --- a/rpc/rpc-transport/rdma/src/rdma.c +++ b/rpc/rpc-transport/rdma/src/rdma.c @@ -405,6 +405,11 @@ gf_rdma_register_arena (void **arg1, void *arg2) for (i = 0; i < count; i++) { new = GF_CALLOC(1, sizeof(gf_rdma_arena_mr), gf_common_mt_rdma_arena_mr); + if (new == NULL) { + gf_log ("rdma", GF_LOG_INFO, "Out of memory:" + " registering pre allocated buffer wth rdma device failed."); + return -1; + } INIT_LIST_HEAD (&new->list); new->iobuf_arena = iobuf_arena; @@ -446,6 +451,11 @@ gf_rdma_register_iobuf_pool (rpc_transport_t *this) list_for_each_entry (tmp, &iobuf_pool->all_arenas, all_list) { new = GF_CALLOC(1, sizeof(gf_rdma_arena_mr), gf_common_mt_rdma_arena_mr); + if (new == NULL) { + gf_log ("rdma", GF_LOG_INFO, "Out of memory:" + " registering pre allocated buffer with rdma device failed."); + return -1; + } INIT_LIST_HEAD (&new->list); new->iobuf_arena = tmp; @@ -3556,8 +3566,19 @@ gf_rdma_do_reads (gf_rdma_peer_t *peer, gf_rdma_post_t *post, list = GF_CALLOC (post->ctx.gf_rdma_reads, sizeof (struct ibv_sge), gf_common_mt_sge); + + if (list == NULL) { + errno = ENOMEM; + ret = -1; + goto unlock; + } wr = GF_CALLOC (post->ctx.gf_rdma_reads, sizeof (struct ibv_send_wr), gf_common_mt_wr); + if (wr == NULL) { + errno = ENOMEM; + ret = -1; + goto unlock; + } for (i = 0; readch[i].rc_discrim != 0; i++) { count = post->ctx.count++; post->ctx.vector[count].iov_base = ptr; @@ -3604,7 +3625,7 @@ gf_rdma_do_reads (gf_rdma_peer_t *peer, gf_rdma_post_t *post, if (!bad_wr) { ret = -1; - goto out; + goto unlock; } for (i = 0; i < post->ctx.gf_rdma_reads; i++) { -- cgit