From 4dca4ea0154162c70aee41ae64d7476c8842b6fa71d5900a0cb2de55c54ffb24 Mon Sep 17 00:00:00 2001 From: Bruce Rogers Date: Tue, 26 Jan 2021 17:57:05 +0000 Subject: [PATCH] Accepting request 866983 from home:bfrogers:branches:Virtualization - Fix two additional cases of qemu crashing due to qemu module packages not being loaded. qom-handle-case-of-chardev-spice-module-.patch spice-app-avoid-crash-when-core-spice-mo.patch OBS-URL: https://build.opensuse.org/request/show/866983 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=607 --- bundles.tar.xz | 4 +- qemu.changes | 8 ++++ qemu.spec | 4 ++ ...handle-case-of-chardev-spice-module-.patch | 32 +++++++++++++ ...e-app-avoid-crash-when-core-spice-mo.patch | 46 +++++++++++++++++++ 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 qom-handle-case-of-chardev-spice-module-.patch create mode 100644 spice-app-avoid-crash-when-core-spice-mo.patch diff --git a/bundles.tar.xz b/bundles.tar.xz index 3ad46808..de1a40fb 100644 --- a/bundles.tar.xz +++ b/bundles.tar.xz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40dac7b5525c97b434e58750c25d2a63773da19514cedf090e79121f91af8d00 -size 42436 +oid sha256:46d1f552ea4a7255ac0240c6ecf5457cd5bdff871733916e017108b744a856bb +size 43236 diff --git a/qemu.changes b/qemu.changes index 26422478..cca78b8f 100644 --- a/qemu.changes +++ b/qemu.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Tue Jan 26 17:52:09 UTC 2021 - Bruce Rogers + +- Fix two additional cases of qemu crashing due to qemu module + packages not being loaded. + qom-handle-case-of-chardev-spice-module-.patch + spice-app-avoid-crash-when-core-spice-mo.patch + ------------------------------------------------------------------- Fri Jan 22 17:24:07 UTC 2021 - Bruce Rogers diff --git a/qemu.spec b/qemu.spec index 15785c8a..090b5f6f 100644 --- a/qemu.spec +++ b/qemu.spec @@ -182,6 +182,8 @@ Patch00047: roms-Makefile-add-cross-file-to-qboot-me.patch Patch00048: usb-Help-compiler-out-to-avoid-a-warning.patch Patch00049: iotests-Fix-_send_qemu_cmd-with-bash-5.1.patch Patch00050: module-for-virtio-gpu-pre-load-module-to.patch +Patch00051: spice-app-avoid-crash-when-core-spice-mo.patch +Patch00052: qom-handle-case-of-chardev-spice-module-.patch # Patches applied in roms/seabios/: Patch01000: seabios-use-python2-explicitly-as-needed.patch Patch01001: seabios-switch-to-python3-as-needed.patch @@ -1052,6 +1054,8 @@ This package records qemu testsuite results and represents successful testing. %endif %patch00049 -p1 %patch00050 -p1 +%patch00051 -p1 +%patch00052 -p1 %patch01000 -p1 %patch01001 -p1 %patch01002 -p1 diff --git a/qom-handle-case-of-chardev-spice-module-.patch b/qom-handle-case-of-chardev-spice-module-.patch new file mode 100644 index 00000000..b4ed992e --- /dev/null +++ b/qom-handle-case-of-chardev-spice-module-.patch @@ -0,0 +1,32 @@ +From: Bruce Rogers +Date: Mon, 25 Jan 2021 22:09:27 -0700 +Subject: qom: handle case of chardev-spice module unavailability + +When qemu is built with modules, but a given module doesn't load +qemu should handle that gracefully. When chardev-spice.so isn't +able to be loaded and qemu is invoked with -display spice-app, +qemu will reach an abort call. Explicitly detect these conditions +and error out in a normal way before we reach that code. + +Signed-off-by: Bruce Rogers +--- + qom/object.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/qom/object.c b/qom/object.c +index 6f301fec34d103b0b07bc41d107c..0dec164192a55d3d9d955d445db9 100644 +--- a/qom/object.c ++++ b/qom/object.c +@@ -236,6 +236,12 @@ static bool type_is_ancestor(TypeImpl *type, TypeImpl *target_type) + return true; + } + ++ ++ if (type->parent && !strcmp(type->parent, "chardev-spiceport")) { ++ if (!type->parent_type && !type_get_by_name(type->parent)) { ++ return false; ++ } ++ } + type = type_get_parent(type); + } + diff --git a/spice-app-avoid-crash-when-core-spice-mo.patch b/spice-app-avoid-crash-when-core-spice-mo.patch new file mode 100644 index 00000000..8aa732f2 --- /dev/null +++ b/spice-app-avoid-crash-when-core-spice-mo.patch @@ -0,0 +1,46 @@ +From: Bruce Rogers +Date: Mon, 25 Jan 2021 21:05:05 -0700 +Subject: spice-app: avoid crash when core spice module isn't loaded + +When qemu is built with modules, but a given module doesn't load +qemu should handle that gracefully. When ui-spice-core.so isn't +able to be loaded and qemu is invoked with -display spice-app or +-spice, qemu will dereference a null pointer. With this change we +check the pointer before dereferencing and error out in a normal +way. + +Signed-off-by: Bruce Rogers +--- + ui/spice-app.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/ui/spice-app.c b/ui/spice-app.c +index 026124ef56a0ef26fbe3cf0a1aba..8ded9024a376da5c4802c1f87fd7 100644 +--- a/ui/spice-app.c ++++ b/ui/spice-app.c +@@ -129,6 +129,7 @@ static void spice_app_atexit(void) + static void spice_app_display_early_init(DisplayOptions *opts) + { + QemuOpts *qopts; ++ QemuOptsList *list; + GError *err = NULL; + + if (opts->has_full_screen) { +@@ -159,11 +160,16 @@ static void spice_app_display_early_init(DisplayOptions *opts) + exit(1); + } + } ++ list = qemu_find_opts("spice"); ++ if (list == NULL) { ++ error_report("spice-app missing spice support\n"); ++ exit(1); ++ } + + type_register(&char_vc_type_info); + + sock_path = g_strjoin("", app_dir, "/", "spice.sock", NULL); +- qopts = qemu_opts_create(qemu_find_opts("spice"), NULL, 0, &error_abort); ++ qopts = qemu_opts_create(list, NULL, 0, &error_abort); + qemu_opt_set(qopts, "disable-ticketing", "on", &error_abort); + qemu_opt_set(qopts, "unix", "on", &error_abort); + qemu_opt_set(qopts, "addr", sock_path, &error_abort);