Re: [PATCH] Kernel parameter parsing fix

From: Zhu, Yi
Date: Sat May 22 2004 - 09:54:41 EST


On Fri, 21 May 2004, Andrew Morton wrote:
>
> Can you explain waht problem this solves?  An example?

The real problem happens on 2.6.5 -mm kernel, but not vanilla kernel
because of the early_param patch.

For example in arch/i386/kernel/setup.c:
__early_param("acpi", early_acpi);

In drivers/acpi/osl.c:
__setup("acpi_os_name=", acpi_os_name_setup);

So if one passes kernel parameter in the bootloader as below,

"acpi=force acpi_os_name=my_override_name"

the "acpi_os_name=" parameter will take the setup func for "acpi",
because they begin with the same string "acpi".


Vanilla kernel doesn't have the problem now because most of the
parameter strings have a trailing '=', so "acpi_os_name" won't
take the setup func for "acpi=". But a safer way is to checkup
the parameter string when parsing it as the patch did.

>
> The patch is wordwrapped
Sorry, please try this time.

--- linux-2.6.6.orig/init/main.c 2004-05-14 13:38:31.000000000 +0800
+++ linux-2.6.6/init/main.c 2004-05-15 00:25:41.339261792 +0800
@@ -149,11 +149,15 @@ static int __init obsolete_checksetup(ch
{
struct obs_kernel_param *p;
extern struct obs_kernel_param __setup_start, __setup_end;
+ char *ptr;
+ int len = strlen(line);

+ if ((ptr = strchr(line, '=')))
+ len = ptr - line;
p = &__setup_start;
do {
int n = strlen(p->str);
- if (!strncmp(line, p->str, n)) {
+ if (len <= n && !strncmp(line, p->str, n)) {
if (!p->setup_func) {
printk(KERN_WARNING "Parameter %s is
obsolete, ignored\n", p->str);
return 1;


Thanks,
--
-----------------------------------------------------------------
Opinions expressed are those of the author and do not represent
Intel Corp.

Zhu Yi (Chuyee)

GnuPG v1.0.6 (GNU/Linux)
http://cn.geocities.com/chewie_chuyee/gpg.txt or
$ gpg --keyserver wwwkeys.pgp.net --recv-keys 71C34820
1024D/71C34820 C939 2B0B FBCE 1D51 109A 55E5 8650 DB90 71C3 4820

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/