diff options
Diffstat (limited to 'kernel/kmod.c')
| -rw-r--r-- | kernel/kmod.c | 12 | 
1 files changed, 7 insertions, 5 deletions
| diff --git a/kernel/kmod.c b/kernel/kmod.c index 25b103190364..bf0e231d9702 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -520,13 +520,15 @@ int call_usermodehelper_pipe(char *path, char **argv, char **envp,  		return -ENOMEM;  	ret = call_usermodehelper_stdinpipe(sub_info, filp); -	if (ret < 0) -		goto out; +	if (ret < 0) { +		call_usermodehelper_freeinfo(sub_info); +		return ret; +	} -	return call_usermodehelper_exec(sub_info, UMH_WAIT_EXEC); +	ret = call_usermodehelper_exec(sub_info, UMH_WAIT_EXEC); +	if (ret < 0)	/* Failed to execute helper, close pipe */ +		filp_close(*filp, NULL); -  out: -	call_usermodehelper_freeinfo(sub_info);  	return ret;  }  EXPORT_SYMBOL(call_usermodehelper_pipe); | 
