Commit 5fec25f2 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

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: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
Tested-by: default avatarAlexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parent b3a9e3b9
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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;
+2 −3
Original line number Diff line number Diff line
@@ -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;
}

/**