Commit 71700bb9 authored by Trond Myklebust's avatar Trond Myklebust

SUNRPC: Fix a memory leak in call_encode()

If we retransmit an RPC request, we currently end up clobbering the
value of req->rq_rcv_buf.bvec that was allocated by the initial call to
xprt_request_prepare(req).
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 8dae5398
...@@ -72,7 +72,6 @@ xdr_buf_init(struct xdr_buf *buf, void *start, size_t len) ...@@ -72,7 +72,6 @@ xdr_buf_init(struct xdr_buf *buf, void *start, size_t len)
buf->head[0].iov_base = start; buf->head[0].iov_base = start;
buf->head[0].iov_len = len; buf->head[0].iov_len = len;
buf->tail[0].iov_len = 0; buf->tail[0].iov_len = 0;
buf->bvec = NULL;
buf->pages = NULL; buf->pages = NULL;
buf->page_len = 0; buf->page_len = 0;
buf->flags = 0; buf->flags = 0;
......
...@@ -2309,6 +2309,7 @@ call_decode(struct rpc_task *task) ...@@ -2309,6 +2309,7 @@ call_decode(struct rpc_task *task)
task->tk_status = 0; task->tk_status = 0;
/* Note: rpc_verify_header() may have freed the RPC slot */ /* Note: rpc_verify_header() may have freed the RPC slot */
if (task->tk_rqstp == req) { if (task->tk_rqstp == req) {
xdr_free_bvec(&req->rq_rcv_buf);
req->rq_reply_bytes_recvd = req->rq_rcv_buf.len = 0; req->rq_reply_bytes_recvd = req->rq_rcv_buf.len = 0;
if (task->tk_client->cl_discrtry) if (task->tk_client->cl_discrtry)
xprt_conditional_disconnect(req->rq_xprt, xprt_conditional_disconnect(req->rq_xprt,
......
...@@ -1623,6 +1623,8 @@ xprt_request_init(struct rpc_task *task) ...@@ -1623,6 +1623,8 @@ xprt_request_init(struct rpc_task *task)
req->rq_snd_buf.buflen = 0; req->rq_snd_buf.buflen = 0;
req->rq_rcv_buf.len = 0; req->rq_rcv_buf.len = 0;
req->rq_rcv_buf.buflen = 0; req->rq_rcv_buf.buflen = 0;
req->rq_snd_buf.bvec = NULL;
req->rq_rcv_buf.bvec = NULL;
req->rq_release_snd_buf = NULL; req->rq_release_snd_buf = NULL;
xprt_reset_majortimeo(req); xprt_reset_majortimeo(req);
dprintk("RPC: %5u reserved req %p xid %08x\n", task->tk_pid, dprintk("RPC: %5u reserved req %p xid %08x\n", task->tk_pid,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment