It's a common pattern in vl.c to chain the qemu_find_opts() output
into the first argument of qemu_opts_parse_noisily():

opts = qemu_opts_parse_noisily(qemu_find_opts("spice"), optarg, false);
if (!opts) {
    exit(1);
}

In cases such as spice that have the group defined in the module file,
it's possible to reach qemu_opts_parse_noisily() with a NULL QemuOptsList if
the module is not present in the host filesystem.

  $ ../configure --enable-modules --enable-spice
  $ make
  $ mv qemu-bundle/usr/local/lib64/qemu/ui-spice-core.so{,.not}
  $ ./qemu-system-x86_64 -spice a
  qemu-system-x86_64: -spice a: There is no option group 'spice'
  Segmentation fault (core dumped)

Return NULL from qemu_opts_parse_noisily() if there is no list.

Signed-off-by: Fabiano Rosas <[email protected]>
---
 util/qemu-option.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/util/qemu-option.c b/util/qemu-option.c
index 9fbf425f86..0ec12d252c 100644
--- a/util/qemu-option.c
+++ b/util/qemu-option.c
@@ -945,6 +945,10 @@ QemuOpts *qemu_opts_parse_noisily(QemuOptsList *list, 
const char *params,
     QemuOpts *opts;
     bool help_wanted = false;
 
+    if (!list) {
+        return NULL;
+    }
+
     opts = opts_parse(list, params, permit_abbrev, true,
                       opts_accepts_any(list) ? NULL : &help_wanted,
                       &err);
-- 
2.53.0


Reply via email to