Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:michael-chang:bsc:1218783
grub2
grub2-efi-xen-cfg-unquote.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File grub2-efi-xen-cfg-unquote.patch of Package grub2
From: Petr Tesarik <ptesarik@suse.cz> Subject: Unquote parameters written to Xen EFI config file References: bsc#900418 Patch-mainline: not yet The GRUB_CMDLINE_* value is copied verbatim to grub.conf, so it is first parsed by GRUB2 before being passed down to the kernel. OTOH Xen EFI loader takes the config file options verbatim. This means that any special GRUB2 syntax must be evaluated when generating that file. Of course, some things are not even possible (e.g. substituting GRUB runtime variables), but let's call them known limitations. Signed-off-by: Petr Tesarik <ptesarik@suse.cz> --- util/grub.d/20_linux_xen.in | 54 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) --- a/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in @@ -139,6 +139,52 @@ is_efi=false fi +grub2_unquote () +{ + awk ' + BEGIN { + bare = "[^{}|&$;<> \t\n'\''\"\\\\]+" + esc = "\\\\." + id = "[[:alpha:]_][[:alnum:]_]*|[[:digit:]]+|[?#*@]" + var = "\\$("id")|\\$\\{("id")\\}" + dqesc = "\\\\[$\"\\\\]" + dqstr = "\\$?\"([^\"]|"var"|"dqesc")*\"" + sqstr = "'\''[^'\'']*'\''" + pat = bare"|"esc"|"var"|"dqstr"|"sqstr + ORS = "" + } + { + patsplit($0, words, pat, sep) + print sep[0] + for (i in words) { + w = words[i] + if (w ~ /^\$?"/) { + # Double-quoted string + patsplit(w, segs, var"|"dqesc, ssep) + print ssep[0] + for (j in segs) { + if (segs[j] ~ /^\\/) + print substr(segs[j], 2) + print ssep[j] + } + } else if (w ~ /^'\''/) { + # Single-quoted string + print substr(w, 2, length(w)-2) + } else if (w ~ /^\\/) { + # Escape sequence + print substr(w, 2) + } else if (w ~ /^\$/) { + # Variable expansion + } else { + # Bare word + print w + } + print sep[i] + } + print "\n" + }' +} + linux_entry () { linux_entry_xsm "$@" false @@ -209,11 +255,13 @@ else section="failsafe.$section_count" fi + xen_args_unq=$(echo $xen_args | grub2_unquote) + args_unq=$(echo $args | grub2_unquote) cat <<-EOF >> $grub_dir/$xen_cfg [$section] - options=${xen_args} - kernel=${basename} root=${linux_root_device_thisversion} ${args} + options=${xen_args_unq} + kernel=${basename} root=${linux_root_device_thisversion} ${args_unq} ramdisk=${initrd_real} EOF message="$(gettext_printf "Loading Xen %s with Linux %s ..." ${xen_version} ${version})"
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor