diff options
| -rw-r--r-- | net/sunrpc/rpcb_clnt.c | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c index c7872bc13860..08b5fa4a2852 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c @@ -771,6 +771,12 @@ void rpcb_getport_async(struct rpc_task *task)  	case RPCBVERS_3:  		map->r_netid = xprt->address_strings[RPC_DISPLAY_NETID];  		map->r_addr = rpc_sockaddr2uaddr(sap, GFP_ATOMIC); +		if (!map->r_addr) { +			status = -ENOMEM; +			dprintk("RPC: %5u %s: no memory available\n", +				task->tk_pid, __func__); +			goto bailout_free_args; +		}  		map->r_owner = "";  		break;  	case RPCBVERS_2: @@ -793,6 +799,8 @@ void rpcb_getport_async(struct rpc_task *task)  	rpc_put_task(child);  	return; +bailout_free_args: +	kfree(map);  bailout_release_client:  	rpc_release_client(rpcb_clnt);  bailout_nofree: | 
