mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 20:54:10 +08:00
umh: Capture the pid in umh_pipe_setup
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. v1: https://lkml.kernel.org/r/87h7uygf9i.fsf_-_@x220.int.ebiederm.org v2: https://lkml.kernel.org/r/875zb97iix.fsf_-_@x220.int.ebiederm.org Link: https://lkml.kernel.org/r/20200702164140.4468-1-ebiederm@xmission.com Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Alexei Starovoitov <ast@kernel.org> Tested-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
parent
b3a9e3b962
commit
5fec25f2cb
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user