diff options
author | Christian Engelmayer <christian.engelmayer@frequentis.com> | 2009-06-13 18:05:26 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2009-06-15 22:34:32 -0400 |
commit | 59fb30660be3f3ead54b3850c401d462449caaaa (patch) | |
tree | d052746d89590b44b854ff2a2fc1dfa7d816040b /net/sunrpc | |
parent | e4636d535e32768c8c500641ddb144f56e3dc5c0 (diff) |
sunrpc: potential memory leak in function rdma_read_xdr
In case the check on ch_count fails the cleanup path is skipped and the
previously allocated memory 'rpl_map', 'chl_map' is not freed.
Reported by Coverity.
Signed-off-by: Christian Engelmayer <christian.engelmayer@frequentis.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c index 42a6f9f20285..9e884383134f 100644 --- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c +++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c | |||
@@ -397,14 +397,14 @@ static int rdma_read_xdr(struct svcxprt_rdma *xprt, | |||
397 | if (!ch) | 397 | if (!ch) |
398 | return 0; | 398 | return 0; |
399 | 399 | ||
400 | /* Allocate temporary reply and chunk maps */ | ||
401 | rpl_map = svc_rdma_get_req_map(); | ||
402 | chl_map = svc_rdma_get_req_map(); | ||
403 | |||
404 | svc_rdma_rcl_chunk_counts(ch, &ch_count, &byte_count); | 400 | svc_rdma_rcl_chunk_counts(ch, &ch_count, &byte_count); |
405 | if (ch_count > RPCSVC_MAXPAGES) | 401 | if (ch_count > RPCSVC_MAXPAGES) |
406 | return -EINVAL; | 402 | return -EINVAL; |
407 | 403 | ||
404 | /* Allocate temporary reply and chunk maps */ | ||
405 | rpl_map = svc_rdma_get_req_map(); | ||
406 | chl_map = svc_rdma_get_req_map(); | ||
407 | |||
408 | if (!xprt->sc_frmr_pg_list_len) | 408 | if (!xprt->sc_frmr_pg_list_len) |
409 | sge_count = map_read_chunks(xprt, rqstp, hdr_ctxt, rmsgp, | 409 | sge_count = map_read_chunks(xprt, rqstp, hdr_ctxt, rmsgp, |
410 | rpl_map, chl_map, ch_count, | 410 | rpl_map, chl_map, ch_count, |