UPSTREAM: umh: Move setting PF_UMH into umh_pipe_setup

I am separating the code specific to user mode drivers from the code
for ordinary user space helpers.  Move setting of PF_UMH from
call_usermodehelper_exec_async which is core user mode helper code
into umh_pipe_setup which is user mode driver code.

The code is equally as easy to write in one location as the other and
the movement minimizes the impact of the user mode driver code on the
core of the user mode helper code.

Setting PF_UMH unconditionally is harmless as an action will only
happen if it is paired with an entry on umh_list.

v1: https://lkml.kernel.org/r/[email protected]
v2: https://lkml.kernel.org/r/[email protected]
Link: https://lkml.kernel.org/r/[email protected]
Reviewed-by: Greg Kroah-Hartman <[email protected]>
Acked-by: Alexei Starovoitov <[email protected]>
Tested-by: Alexei Starovoitov <[email protected]>
Change-Id: I0fb6f450c3780a1bce21d849b851de097dd413db
Signed-off-by: "Eric W. Biederman" <[email protected]>
This commit is contained in:
Eric W. Biederman 2020-06-25 10:04:25 -05:00 • committed by basamaryan
commit 0f30111a3d
No known key found for this signature in database
GPG key ID: 210D5384FB2A5885

View file

@ -111,12 +111,10 @@ static int call_usermodehelper_exec_async(void *data)
commit_creds(new);
if (sub_info->file) {
if (sub_info->file)
retval = do_execve_file(sub_info->file,
sub_info->argv, sub_info->envp);
if (!retval)
current->flags |= PF_UMH;
} else
else
retval = do_execve(getname_kernel(sub_info->path),
(const char __user *const __user *)sub_info->argv,
(const char __user *const __user *)sub_info->envp);
@ -450,6 +448,7 @@ static int umd_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);
current->flags |= PF_UMH;
return 0;
}