From: Rusty Russell <rusty@rustcorp.com.au>
To: Arthur Gautier <baloo@gandi.net>
Cc: linux-kernel@vger.kernel.org, Arthur Gautier <baloo@gandi.net>
Subject: Re: [PATCH] param: fixup quote parsing of kernel arguments
Date: Wed, 08 Apr 2015 15:29:43 +0930 [thread overview]
Message-ID: <87twwr17ow.fsf@rustcorp.com.au> (raw)
In-Reply-To: <1428405635-8231-1-git-send-email-baloo@gandi.net>
Arthur Gautier <baloo@gandi.net> writes:
> When starting kernel with arguments like:
> init=/bin/sh -c "echo arguments"
> the trailing double quote is not removed which results in following command
> being executed:
> /bin/sh -c 'echo arguments"'
>
> This commit removes the trailing double quote.
>
> Signed-off-by: Arthur Gautier <baloo@gandi.net>
Hi Arthur,
Thanks, I'd not considered quotes outside '='. But this
fixes it in a weird way: we handle quotes below, we just don't do
anything for the "raw value" case:
for (i = 0; args[i]; i++) {
if (isspace(args[i]) && !in_quote)
break;
if (equals == 0) {
if (args[i] == '=')
equals = i;
}
if (args[i] == '"')
in_quote = !in_quote;
}
*param = args;
if (!equals)
*val = NULL;
else {
args[equals] = '\0';
*val = args + equals + 1;
/* Don't include quotes in value. */
if (**val == '"') {
(*val)++;
if (args[i-1] == '"')
args[i-1] = '\0';
}
if (quoted && args[i-1] == '"')
args[i-1] = '\0';
}
The logical fix is to just always remove the close quotes in both
cases:
diff --git a/kernel/params.c b/kernel/params.c
index 728e05b167de..a22d6a759b1a 100644
--- a/kernel/params.c
+++ b/kernel/params.c
@@ -173,9 +173,9 @@ static char *next_arg(char *args, char **param, char **val)
if (args[i-1] == '"')
args[i-1] = '\0';
}
- if (quoted && args[i-1] == '"')
- args[i-1] = '\0';
}
+ if (quoted && args[i-1] == '"')
+ args[i-1] = '\0';
if (args[i]) {
args[i] = '\0';
Does this work for you?
Thanks,
Rusty.
> ---
> kernel/params.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/params.c b/kernel/params.c
> index 728e05b..2118546 100644
> --- a/kernel/params.c
> +++ b/kernel/params.c
> @@ -156,8 +156,11 @@ static char *next_arg(char *args, char **param, char **val)
> if (args[i] == '=')
> equals = i;
> }
> - if (args[i] == '"')
> + if (args[i] == '"') {
> + if (!equals)
> + args[i] = '\0';
> in_quote = !in_quote;
> + }
> }
>
> *param = args;
> --
> 2.1.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2015-04-08 6:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-07 11:20 [PATCH] param: fixup quote parsing of kernel arguments Arthur Gautier
2015-04-08 5:59 ` Rusty Russell [this message]
2015-04-08 9:44 ` Arthur Gautier
2015-04-15 0:54 ` Rusty Russell
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=87twwr17ow.fsf@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=baloo@gandi.net \
--cc=linux-kernel@vger.kernel.org \
/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.