diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2023-01-13 11:35:40 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2023-02-10 14:12:06 +0100 |
commit | 78901b5047a2c27858f6c3e780ab3f2af5463631 (patch) | |
tree | f3c45824d8c7b87eb3972ce3f107703ec4fb9927 /softmmu/vl.c | |
parent | 5080152e2ef6cde7aa692e29880c62bd54acb750 (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/vl.c')
-rw-r--r-- | softmmu/vl.c | 15 |
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) |