5 Star 0 Fork 16

OpenCloudOS Stream/grub2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0043-Unquote-parameters-written-to-Xen-EFI-config-file.patch 2.76 KB
一键复制 编辑 原始数据 按行查看 历史
nilusyi 提交于 2024-04-07 16:45 . update patches
From d996e4687d9f554bd35091838b85f723b9eec08f Mon Sep 17 00:00:00 2001
From: Petr Tesarik <ptesarik@suse.cz>
Date: Mon, 1 Apr 2024 16:20:40 +0800
Subject: [PATCH 043/272] Unquote parameters written to Xen EFI config file
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 | 52 +++++++++++++++++++++++++++++++++++--
1 file changed, 50 insertions(+), 2 deletions(-)
diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
index 21ac71bb8..7641f8b27 100644
--- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in
@@ -139,6 +139,52 @@ else
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 @@ linux_entry_xsm ()
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})"
--
2.41.0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/opencloudos-stream/grub2.git
git@gitee.com:opencloudos-stream/grub2.git
opencloudos-stream
grub2
grub2
master

搜索帮助