diff --git a/[refs] b/[refs] index fd6df2fd7798..609f50ca3262 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 42d53b4ff7d61487d18274ebdf1f70c1aef6f122 +refs/heads/master: 8767ba2796a1c894e6d9524584a26a8224f0543d diff --git a/trunk/kernel/kmod.c b/trunk/kernel/kmod.c index 25b103190364..bf0e231d9702 100644 --- a/trunk/kernel/kmod.c +++ b/trunk/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);