mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
UPSTREAM: umh: Remove call_usermodehelper_setup_file.
The only caller of call_usermodehelper_setup_file is fork_usermode_blob. In fork_usermode_blob replace call_usermodehelper_setup_file with call_usermodehelper_setup and delete fork_usermodehelper_setup_file. For this to work the argv_free is moved from umh_clean_and_save_pid to fork_usermode_blob. 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: I0bb60e8176a62d8c0523394b30a13f1a9153d29f Signed-off-by: "Eric W. Biederman" <[email protected]>
This commit is contained in:
parent
8f74e76f49
commit
7c02915beb
2 changed files with 11 additions and 34 deletions
42
kernel/umh.c
42
kernel/umh.c
|
|
@ -413,33 +413,6 @@ struct subprocess_info *call_usermodehelper_setup(const char *path, char **argv,
|
|||
}
|
||||
EXPORT_SYMBOL(call_usermodehelper_setup);
|
||||
|
||||
struct subprocess_info *call_usermodehelper_setup_file(struct file *file,
|
||||
int (*init)(struct subprocess_info *info, struct cred *new),
|
||||
void (*cleanup)(struct subprocess_info *info), void *data)
|
||||
{
|
||||
struct subprocess_info *sub_info;
|
||||
struct umh_info *info = data;
|
||||
const char *cmdline = (info->cmdline) ? info->cmdline : "usermodehelper";
|
||||
|
||||
sub_info = kzalloc(sizeof(struct subprocess_info), GFP_KERNEL);
|
||||
if (!sub_info)
|
||||
return NULL;
|
||||
|
||||
sub_info->argv = argv_split(GFP_KERNEL, cmdline, NULL);
|
||||
if (!sub_info->argv) {
|
||||
kfree(sub_info);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
INIT_WORK(&sub_info->work, call_usermodehelper_exec_work);
|
||||
sub_info->path = "none";
|
||||
sub_info->file = file;
|
||||
sub_info->init = init;
|
||||
sub_info->cleanup = cleanup;
|
||||
sub_info->data = data;
|
||||
return sub_info;
|
||||
}
|
||||
|
||||
static int umd_setup(struct subprocess_info *info, struct cred *new)
|
||||
{
|
||||
struct umh_info *umh_info = info->data;
|
||||
|
|
@ -489,8 +462,6 @@ static void umd_cleanup(struct subprocess_info *info)
|
|||
fput(umh_info->pipe_to_umh);
|
||||
fput(umh_info->pipe_from_umh);
|
||||
}
|
||||
|
||||
argv_free(info->argv);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -511,7 +482,9 @@ static void umd_cleanup(struct subprocess_info *info)
|
|||
*/
|
||||
int fork_usermode_blob(void *data, size_t len, struct umh_info *info)
|
||||
{
|
||||
const char *cmdline = (info->cmdline) ? info->cmdline : "usermodehelper";
|
||||
struct subprocess_info *sub_info;
|
||||
char **argv = NULL;
|
||||
struct file *file;
|
||||
ssize_t written;
|
||||
loff_t pos = 0;
|
||||
|
|
@ -530,11 +503,16 @@ int fork_usermode_blob(void *data, size_t len, struct umh_info *info)
|
|||
}
|
||||
|
||||
err = -ENOMEM;
|
||||
sub_info = call_usermodehelper_setup_file(file, umd_setup, umd_cleanup,
|
||||
info);
|
||||
argv = argv_split(GFP_KERNEL, cmdline, NULL);
|
||||
if (!argv)
|
||||
goto out;
|
||||
|
||||
sub_info = call_usermodehelper_setup("none", argv, NULL, GFP_KERNEL,
|
||||
umd_setup, umd_cleanup, info);
|
||||
if (!sub_info)
|
||||
goto out;
|
||||
|
||||
sub_info->file = file;
|
||||
err = call_usermodehelper_exec(sub_info, UMH_WAIT_EXEC);
|
||||
if (!err) {
|
||||
mutex_lock(&umh_list_lock);
|
||||
|
|
@ -542,6 +520,8 @@ int fork_usermode_blob(void *data, size_t len, struct umh_info *info)
|
|||
mutex_unlock(&umh_list_lock);
|
||||
}
|
||||
out:
|
||||
if (argv)
|
||||
argv_free(argv);
|
||||
fput(file);
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue