forked from mirrors/linux
		
	SUNRPC: Handle allocation failure in rpc_new_task()
If the call to rpc_alloc_task() fails, then ensure that the calldata is
released, and that rpc_run_task() and rpc_run_bc_task() bail out early.
Reported-by: NeilBrown <neilb@suse.de>
Fixes: 910ad38697 ("NFS: Fix memory allocation in rpc_alloc_task()")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
			
			
This commit is contained in:
		
							parent
							
								
									88dee0cc93
								
							
						
					
					
						commit
						25cf32ad5d
					
				
					 2 changed files with 12 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1127,6 +1127,8 @@ struct rpc_task *rpc_run_task(const struct rpc_task_setup *task_setup_data)
 | 
			
		|||
	struct rpc_task *task;
 | 
			
		||||
 | 
			
		||||
	task = rpc_new_task(task_setup_data);
 | 
			
		||||
	if (IS_ERR(task))
 | 
			
		||||
		return task;
 | 
			
		||||
 | 
			
		||||
	if (!RPC_IS_ASYNC(task))
 | 
			
		||||
		task->tk_flags |= RPC_TASK_CRED_NOREF;
 | 
			
		||||
| 
						 | 
				
			
			@ -1227,6 +1229,11 @@ struct rpc_task *rpc_run_bc_task(struct rpc_rqst *req)
 | 
			
		|||
	 * Create an rpc_task to send the data
 | 
			
		||||
	 */
 | 
			
		||||
	task = rpc_new_task(&task_setup_data);
 | 
			
		||||
	if (IS_ERR(task)) {
 | 
			
		||||
		xprt_free_bc_request(req);
 | 
			
		||||
		return task;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	xprt_init_bc_request(req, task);
 | 
			
		||||
 | 
			
		||||
	task->tk_action = call_bc_encode;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1128,6 +1128,11 @@ struct rpc_task *rpc_new_task(const struct rpc_task_setup *setup_data)
 | 
			
		|||
 | 
			
		||||
	if (task == NULL) {
 | 
			
		||||
		task = rpc_alloc_task();
 | 
			
		||||
		if (task == NULL) {
 | 
			
		||||
			rpc_release_calldata(setup_data->callback_ops,
 | 
			
		||||
					     setup_data->callback_data);
 | 
			
		||||
			return ERR_PTR(-ENOMEM);
 | 
			
		||||
		}
 | 
			
		||||
		flags = RPC_TASK_DYNAMIC;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue