Public bug reported:

I am writing a `grub.cfg` which contains this:

```
    linux /boot/kernel \
        root=/dev/mapper/verity-root \
        dm_mod.create="\"verity-root,,ro,0 163840 verity 1 /dev/vda3 /dev/vda3 
4096 4096 10240 10240 sha256 ${ROOT_HASH_A} -\"" \
        ${kernel_common_cmdline}
```

The problem I have is that the kernel then ultimately sees this:

`dm_mod.create=\"verity-root,,ro,0 163840 verity 1 /dev/vda3 /dev/vda3
4096 4096 10240 10240 sha256
4b2693f593b5472ae2661fa9b4a499dce2301e6b66d385d1d7ee8bde1466e87f -\"`

And not

`dm_mod.create="verity-root,,ro,0 163840 verity 1 /dev/vda3 /dev/vda3
4096 4096 10240 10240 sha256
4b2693f593b5472ae2661fa9b4a499dce2301e6b66d385d1d7ee8bde1466e87f -"`

as I intended (and what the documentation states should be the result,
see the paragraph on quoting here:
https://www.gnu.org/software/grub/manual/grub/html_node/Shell_002dlike-
scripting.html).

There are various ways to try and work around the issue, but none result in a 
command line that the kernel then interprets correctly.
What appears to be the solution intended by the grub authors gives this result:

`"dm_mod.create=verity-root,,ro,0 163840 verity 1 /dev/vda3 /dev/vda3
4096 4096 10240 10240 sha256
4b2693f593b5472ae2661fa9b4a499dce2301e6b66d385d1d7ee8bde1466e87f -"`

However the kernel does not parse this correctly.
One can also try to use escaped spaces to go around the quoting issue, however 
the backslashes themselves are then automatically escaped by grub in the 
output, and thus the kernel fails to parse the line correctly too.

In effect, it is not possible to produce a linux command line that
contains unescaped double quotes or backslashes, except in the very
specific way that grub handles the "argument containing a space" case,
which does not function correctly with the kernel parser.

This bug is a known issue and patches have been suggested to solve it,
see here: https://lists.gnu.org/archive/html/grub-
devel/2023-07/msg00089.html

This bug is also related to
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/445952 but is more
narrow: my issue is exclusively about grub adding unwanted escape
characters to the linux command line, not about how it interprets quotes
coming from environment variables.

** Affects: grub2 (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2112179

Title:
  Cannot pass unescaped double quotes to the linux command line

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/2112179/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to