SHA256
1
0
forked from pool/qemu

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
This commit is contained in:
Bruce Rogers 2021-01-26 17:57:05 +00:00 committed by Git OBS Bridge
parent 0c8904995e
commit 4dca4ea015
5 changed files with 92 additions and 2 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:40dac7b5525c97b434e58750c25d2a63773da19514cedf090e79121f91af8d00
size 42436
oid sha256:46d1f552ea4a7255ac0240c6ecf5457cd5bdff871733916e017108b744a856bb
size 43236

View File

@ -1,3 +1,11 @@
-------------------------------------------------------------------
Tue Jan 26 17:52:09 UTC 2021 - Bruce Rogers <brogers@suse.com>
- 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 <brogers@suse.com>

View File

@ -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

View File

@ -0,0 +1,32 @@
From: Bruce Rogers <brogers@suse.com>
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 <brogers@suse.com>
---
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);
}

View File

@ -0,0 +1,46 @@
From: Bruce Rogers <brogers@suse.com>
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 <brogers@suse.com>
---
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);