From: Oleg Nesterov <oleg@redhat.com>
To: Lucas De Marchi <lucas.de.marchi@gmail.com>
Cc: linux-kernel@vger.kernel.org, Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH 3/3] init/Kconfig: Add option to set modprobe command
Date: Fri, 10 May 2013 15:12:47 +0200 [thread overview]
Message-ID: <20130510131247.GA1306@redhat.com> (raw)
In-Reply-To: <20130510125826.GA553@redhat.com>
On 05/10, Oleg Nesterov wrote:
>
> On 05/10, Lucas De Marchi wrote:
> >
> > -char modprobe_path[KMOD_PATH_LEN] = "/sbin/modprobe -q --";
> > +char modprobe_path[KMOD_PATH_LEN] = CONFIG_DEFAULT_MODULE_LOAD_BIN;
>
> But even after 1/3 and 2/3 this can break free_modprobe_argv() ?
> It assumes that argv[3] is module_name.
I'd suggest the patch below instead of 1 + 2. We can simply change
call_modprobe() to use kasprintf() + argv_split().
Oleg.
kmod.c | 38 ++++++++++++++++----------------------
1 file changed, 16 insertions(+), 22 deletions(-)
--- x/kernel/kmod.c
+++ x/kernel/kmod.c
@@ -64,20 +64,16 @@ static DECLARE_RWSEM(umhelper_sem);
#ifdef CONFIG_MODULES
-/*
- modprobe_path is set via /proc/sys.
-*/
-char modprobe_path[KMOD_PATH_LEN] = "/sbin/modprobe";
+/* modprobe_path is set via /proc/sys/kernel/modprobe */
+char modprobe_path[KMOD_PATH_LEN] = "/sbin/modprobe -q --";
static void free_modprobe_argv(struct subprocess_info *info)
{
- kfree(info->argv[3]); /* check call_modprobe() */
- kfree(info->argv);
+ argv_free(info->argv);
}
static int call_modprobe(char *module_name, int wait)
{
- struct subprocess_info *info;
static char *envp[] = {
"HOME=/",
"TERM=linux",
@@ -85,31 +81,29 @@ static int call_modprobe(char *module_na
NULL
};
- char **argv = kmalloc(sizeof(char *[5]), GFP_KERNEL);
- if (!argv)
- goto out;
+ struct subprocess_info *info;
+ char **argv;
+ char *args;
- module_name = kstrdup(module_name, GFP_KERNEL);
- if (!module_name)
- goto free_argv;
+ args = kasprintf(GFP_KERNEL, "%s %s", modprobe_path, module_name);
+ if (!args)
+ goto out;
- argv[0] = modprobe_path;
- argv[1] = "-q";
- argv[2] = "--";
- argv[3] = module_name; /* check free_modprobe_argv() */
- argv[4] = NULL;
+ argv = argv_split(GFP_KERNEL, args, NULL);
+ if (!argv)
+ goto free_args;
info = call_usermodehelper_setup(modprobe_path, argv, envp, GFP_KERNEL,
NULL, free_modprobe_argv, NULL);
if (!info)
- goto free_module_name;
+ goto free_argv;
return call_usermodehelper_exec(info, wait | UMH_KILLABLE);
-free_module_name:
- kfree(module_name);
free_argv:
- kfree(argv);
+ argv_free(argv);
+free_args:
+ kfree(args);
out:
return -ENOMEM;
}
next prev parent reply other threads:[~2013-05-10 13:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-10 4:15 [PATCH 1/3] argv_split(): Allow extra params Lucas De Marchi
2013-05-10 4:15 ` [PATCH 2/3] kmod: Use argv_split(), passing module as extra param Lucas De Marchi
2013-05-10 4:15 ` [PATCH 3/3] init/Kconfig: Add option to set modprobe command Lucas De Marchi
2013-05-10 12:58 ` Oleg Nesterov
2013-05-10 13:12 ` Oleg Nesterov [this message]
2013-05-10 13:15 ` Lucas De Marchi
2013-05-10 15:36 ` Oleg Nesterov
2013-05-10 16:03 ` Lucas De Marchi
2013-05-10 17:10 ` Oleg Nesterov
2013-05-10 17:35 ` Oleg Nesterov
2013-05-10 17:44 ` Lucas De Marchi
2013-05-13 13:59 ` Oleg Nesterov
2013-05-11 20:10 ` Lucas De Marchi
2013-05-13 14:16 ` Oleg Nesterov
2013-05-13 14:35 ` [RFC] teach argv_split() to ignore the spaces surrounded by \e Oleg Nesterov
2013-05-13 16:06 ` Colin Walters
2013-05-13 17:13 ` Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130510131247.GA1306@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lucas.de.marchi@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.