aboutsummaryrefslogtreecommitdiff
path: root/softmmu
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2023-01-13 11:35:40 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2023-02-10 14:12:06 +0100
commit78901b5047a2c27858f6c3e780ab3f2af5463631 (patch)
treef3c45824d8c7b87eb3972ce3f107703ec4fb9927 /softmmu
parent5080152e2ef6cde7aa692e29880c62bd54acb750 (diff)
vl: catch [accel] entry without accelerator
Avoid a SIGSEGV and return an error instead. Reported-by: Thomas Huth <thuth@redhat.com> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1439 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'softmmu')
-rw-r--r--softmmu/vl.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/softmmu/vl.c b/softmmu/vl.c
index b2ee3fee3f..459588aa7d 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -2204,14 +2204,18 @@ static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
int ret;
bool qtest_with_kvm;
+ if (!acc) {
+ error_setg(errp, QERR_MISSING_PARAMETER, "accel");
+ goto bad;
+ }
+
qtest_with_kvm = g_str_equal(acc, "kvm") && qtest_chrdev != NULL;
if (!ac) {
- *p_init_failed = true;
if (!qtest_with_kvm) {
error_report("invalid accelerator %s", acc);
}
- return 0;
+ goto bad;
}
accel = ACCEL(object_new_with_class(OBJECT_CLASS(ac)));
object_apply_compat_props(OBJECT(accel));
@@ -2221,14 +2225,17 @@ static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp)
ret = accel_init_machine(accel, current_machine);
if (ret < 0) {
- *p_init_failed = true;
if (!qtest_with_kvm || ret != -ENOENT) {
error_report("failed to initialize %s: %s", acc, strerror(-ret));
}
- return 0;
+ goto bad;
}
return 1;
+
+bad:
+ *p_init_failed = true;
+ return 0;
}
static void configure_accelerators(const char *progname)