The pid in struct subprocess_info is only used by umh_clean_and_save_pid to
write the pid into umh_info.

Instead always capture the pid on struct umh_info in umh_pipe_setup, removing
code that is specific to user mode drivers from the common user path of
user mode helpers.

Link: https://lkml.kernel.org/r/[email protected]
Reviewed-by: Greg Kroah-Hartman <[email protected]>
Signed-off-by: "Eric W. Biederman" <[email protected]>
---
 include/linux/umh.h | 1 -
 kernel/umh.c        | 5 ++---
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/include/linux/umh.h b/include/linux/umh.h
index 0c08de356d0d..aae16a0ebd0f 100644
--- a/include/linux/umh.h
+++ b/include/linux/umh.h
@@ -25,7 +25,6 @@ struct subprocess_info {
        struct file *file;
        int wait;
        int retval;
-       pid_t pid;
        int (*init)(struct subprocess_info *info, struct cred *new);
        void (*cleanup)(struct subprocess_info *info);
        void *data;
diff --git a/kernel/umh.c b/kernel/umh.c
index 79f139a7ca03..c2a582b3a2bf 100644
--- a/kernel/umh.c
+++ b/kernel/umh.c
@@ -102,7 +102,6 @@ static int call_usermodehelper_exec_async(void *data)
 
        commit_creds(new);
 
-       sub_info->pid = task_pid_nr(current);
        if (sub_info->file) {
                retval = do_execve_file(sub_info->file,
                                        sub_info->argv, sub_info->envp);
@@ -468,6 +467,7 @@ static int umh_pipe_setup(struct subprocess_info *info, 
struct cred *new)
 
        umh_info->pipe_to_umh = to_umh[1];
        umh_info->pipe_from_umh = from_umh[0];
+       umh_info->pid = task_pid_nr(current);
        return 0;
 }
 
@@ -476,13 +476,12 @@ static void umh_clean_and_save_pid(struct subprocess_info 
*info)
        struct umh_info *umh_info = info->data;
 
        /* cleanup if umh_pipe_setup() was successful but exec failed */
-       if (info->pid && info->retval) {
+       if (info->retval) {
                fput(umh_info->pipe_to_umh);
                fput(umh_info->pipe_from_umh);
        }
 
        argv_free(info->argv);
-       umh_info->pid = info->pid;
 }
 
 /**
-- 
2.25.0

Reply via email to