diff options
author | Philippe Mathieu-Daudé <philmd@redhat.com> | 2020-05-19 19:17:09 +0200 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@redhat.com> | 2020-07-03 18:16:01 +0200 |
commit | f7d8afb16dceb780270960692b949329c8752ff2 (patch) | |
tree | a1e0e54f0891bfb3c0dc99b136020d555035c80a | |
parent | 6552d87c48679e1ece2da3ddc0947d2146de53ee (diff) | |
download | qemu-f7d8afb16dceb780270960692b949329c8752ff2.zip qemu-f7d8afb16dceb780270960692b949329c8752ff2.tar.gz qemu-f7d8afb16dceb780270960692b949329c8752ff2.tar.bz2 |
softmmu/vl: Allow -fw_cfg 'gen_id' option to use the 'etc/' namespace
Names of user-provided fw_cfg items are supposed to start
with "opt/". However FW_CFG_DATA_GENERATOR items are generated
by QEMU, so allow the "etc/" namespace in this specific case.
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20200623172726.21040-5-philmd@redhat.com>
-rw-r--r-- | docs/specs/fw_cfg.txt | 4 | ||||
-rw-r--r-- | softmmu/vl.c | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/docs/specs/fw_cfg.txt b/docs/specs/fw_cfg.txt index bc16daa..3e6d586 100644 --- a/docs/specs/fw_cfg.txt +++ b/docs/specs/fw_cfg.txt @@ -258,4 +258,8 @@ Prefix "opt/org.qemu/" is reserved for QEMU itself. Use of names not beginning with "opt/" is potentially dangerous and entirely unsupported. QEMU will warn if you try. +Use of names not beginning with "opt/" is tolerated with 'gen_id' (that +is, the warning is suppressed), but you must know exactly what you're +doing. + All externally provided fw_cfg items are read-only to the guest. diff --git a/softmmu/vl.c b/softmmu/vl.c index 13cada3..159f035 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -2049,7 +2049,13 @@ static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp) FW_CFG_MAX_FILE_PATH - 1); return -1; } - if (strncmp(name, "opt/", 4) != 0) { + if (nonempty_str(gen_id)) { + /* + * In this particular case where the content is populated + * internally, the "etc/" namespace protection is relaxed, + * so do not emit a warning. + */ + } else if (strncmp(name, "opt/", 4) != 0) { warn_report("externally provided fw_cfg item names " "should be prefixed with \"opt/\""); } |