aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kmod.c82
1 files changed, 0 insertions, 82 deletions
diff --git a/kernel/kmod.c b/kernel/kmod.c
index 531ef62cf536..d1544547fea6 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -147,23 +147,6 @@ static int ____call_usermodehelper(void *data)
147 commit_creds(sub_info->cred); 147 commit_creds(sub_info->cred);
148 sub_info->cred = NULL; 148 sub_info->cred = NULL;
149 149
150 /* Install input pipe when needed */
151 if (sub_info->stdin) {
152 struct files_struct *f = current->files;
153 struct fdtable *fdt;
154 /* no races because files should be private here */
155 sys_close(0);
156 fd_install(0, sub_info->stdin);
157 spin_lock(&f->file_lock);
158 fdt = files_fdtable(f);
159 FD_SET(0, fdt->open_fds);
160 FD_CLR(0, fdt->close_on_exec);
161 spin_unlock(&f->file_lock);
162
163 /* and disallow core files too */
164 current->signal->rlim[RLIMIT_CORE] = (struct rlimit){0, 0};
165 }
166
167 /* We can run anywhere, unlike our parent keventd(). */ 150 /* We can run anywhere, unlike our parent keventd(). */
168 set_cpus_allowed_ptr(current, cpu_all_mask); 151 set_cpus_allowed_ptr(current, cpu_all_mask);
169 152
@@ -429,35 +412,6 @@ void call_usermodehelper_setfns(struct subprocess_info *info,
429EXPORT_SYMBOL(call_usermodehelper_setfns); 412EXPORT_SYMBOL(call_usermodehelper_setfns);
430 413
431/** 414/**
432 * call_usermodehelper_stdinpipe - set up a pipe to be used for stdin
433 * @sub_info: a subprocess_info returned by call_usermodehelper_setup
434 * @filp: set to the write-end of a pipe
435 *
436 * This constructs a pipe, and sets the read end to be the stdin of the
437 * subprocess, and returns the write-end in *@filp.
438 */
439int call_usermodehelper_stdinpipe(struct subprocess_info *sub_info,
440 struct file **filp)
441{
442 struct file *f;
443
444 f = create_write_pipe(0);
445 if (IS_ERR(f))
446 return PTR_ERR(f);
447 *filp = f;
448
449 f = create_read_pipe(f, 0);
450 if (IS_ERR(f)) {
451 free_write_pipe(*filp);
452 return PTR_ERR(f);
453 }
454 sub_info->stdin = f;
455
456 return 0;
457}
458EXPORT_SYMBOL(call_usermodehelper_stdinpipe);
459
460/**
461 * call_usermodehelper_exec - start a usermode application 415 * call_usermodehelper_exec - start a usermode application
462 * @sub_info: information about the subprocessa 416 * @sub_info: information about the subprocessa
463 * @wait: wait for the application to finish and return status. 417 * @wait: wait for the application to finish and return status.
@@ -504,42 +458,6 @@ unlock:
504} 458}
505EXPORT_SYMBOL(call_usermodehelper_exec); 459EXPORT_SYMBOL(call_usermodehelper_exec);
506 460
507/**
508 * call_usermodehelper_pipe - call a usermode helper process with a pipe stdin
509 * @path: path to usermode executable
510 * @argv: arg vector for process
511 * @envp: environment for process
512 * @filp: set to the write-end of a pipe
513 *
514 * This is a simple wrapper which executes a usermode-helper function
515 * with a pipe as stdin. It is implemented entirely in terms of
516 * lower-level call_usermodehelper_* functions.
517 */
518int call_usermodehelper_pipe(char *path, char **argv, char **envp,
519 struct file **filp)
520{
521 struct subprocess_info *sub_info;
522 int ret;
523
524 sub_info = call_usermodehelper_setup(path, argv, envp,
525 GFP_KERNEL);
526 if (sub_info == NULL)
527 return -ENOMEM;
528
529 ret = call_usermodehelper_stdinpipe(sub_info, filp);
530 if (ret < 0) {
531 call_usermodehelper_freeinfo(sub_info);
532 return ret;
533 }
534
535 ret = call_usermodehelper_exec(sub_info, UMH_WAIT_EXEC);
536 if (ret < 0) /* Failed to execute helper, close pipe */
537 filp_close(*filp, NULL);
538
539 return ret;
540}
541EXPORT_SYMBOL(call_usermodehelper_pipe);
542
543void __init usermodehelper_init(void) 461void __init usermodehelper_init(void)
544{ 462{
545 khelper_wq = create_singlethread_workqueue("khelper"); 463 khelper_wq = create_singlethread_workqueue("khelper");