libkmod mishandles parameters re-quoted by grub2

3 messages, 3 authors, 2021-02-12 · open the first message on its own page

libkmod mishandles parameters re-quoted by grub2

From: Jiri Slaby <jirislaby@kernel.org>
Date: 2021-01-26 06:06:37

Hi,

when one passes to the kernel a module parameter from grub2 such as:
   parport.dyndbg="file drivers/parport/ieee1284_ops.c +mpf"
the kernel receives:
   "parport.dyndbg=file drivers/parport/ieee1284_ops.c +mpf"
as grub2 handles quotes this way. It may be a bug in grub2, it was even 
tried to be fixed, but there is no all-cases-working fix yet:
   https://bugzilla.suse.com/show_bug.cgi?id=1181111#c10

The kernel parses the parameter correctly, though:
   parse_one: doing dyndbg params: parport.dyndbg='file 
drivers/parport/ieee1284_ops.c +mpf'

But libkmod doesn't. When parport is modprobe-d, this parameter is not 
passed to it.

kmod_config_parse_kcmdline ignores the parameter as:
   if (is_quoted) {
     /* don't consider a module until closing quotes */

I am not sure how to fix this, can someone look into it and make the 
parser similar to kernel's?

thanks,
-- 
js
suse labs

Re: libkmod mishandles parameters re-quoted by grub2

From: Lucas De Marchi <hidden>
Date: 2021-01-28 04:08:50

On Mon, Jan 25, 2021 at 10:06 PM Jiri Slaby [off-list ref] wrote:
Hi,

when one passes to the kernel a module parameter from grub2 such as:
   parport.dyndbg="file drivers/parport/ieee1284_ops.c +mpf"
the kernel receives:
   "parport.dyndbg=file drivers/parport/ieee1284_ops.c +mpf"
as grub2 handles quotes this way. It may be a bug in grub2, it was even
tried to be fixed, but there is no all-cases-working fix yet:
   https://bugzilla.suse.com/show_bug.cgi?id=1181111#c10

The kernel parses the parameter correctly, though:
   parse_one: doing dyndbg params: parport.dyndbg='file
drivers/parport/ieee1284_ops.c +mpf'

But libkmod doesn't. When parport is modprobe-d, this parameter is not
passed to it.
yeah... if kernel parses the parameter correctly, we should accept it too.
kmod_config_parse_kcmdline ignores the parameter as:
   if (is_quoted) {
     /* don't consider a module until closing quotes */

I am not sure how to fix this, can someone look into it and make the
parser similar to kernel's?
I will take a look soon.

thanks
Lucas De Marchi
thanks,
--
js
suse labs

Re: libkmod mishandles parameters re-quoted by grub2

From: Lucas De Marchi <hidden>
Date: 2021-02-12 09:43:08

On Mon, Jan 25, 2021 at 09:49:13AM +0100, Jiri Slaby wrote:
Hi,

when one passes to the kernel a module parameter from grub2 such as:
 parport.dyndbg="file drivers/parport/ieee1284_ops.c +mpf"
the kernel receives:
 "parport.dyndbg=file drivers/parport/ieee1284_ops.c +mpf"
as grub2 handles quotes this way. It may be a bug in grub2, it was 
even tried to be fixed, but there is no all-cases-working fix yet:
 https://bugzilla.suse.com/show_bug.cgi?id=1181111#c10

The kernel parses the parameter correctly, though:
 parse_one: doing dyndbg params: parport.dyndbg='file 
drivers/parport/ieee1284_ops.c +mpf'

But libkmod doesn't. When parport is modprobe-d, this parameter is not 
passed to it.

kmod_config_parse_kcmdline ignores the parameter as:
 if (is_quoted) {
   /* don't consider a module until closing quotes */

I am not sure how to fix this, can someone look into it and make the 
parser similar to kernel's?
We have to ignore ill-formed kernel cmdline and that makes it harder.

I threw out the current implementation and rewrote it into a state
machine. It passes the tests, but it's unfortunate we have to do this,
particularly because we have to re-quote it the "right way" to pass back
to kernel, unmangling it.

I will share the patch shortly.

Lucas De Marchi
thanks,
-- 
js
suse labs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help