Commit 5b863f3e authored by Eduardo Habkost's avatar Eduardo Habkost
Browse files

cpu: Fix crash with empty -cpu option



Fix the following crash:

  $ qemu-system-x86_64 -cpu ''
  qemu-system-x86_64: qom/cpu.c:291: cpu_class_by_name: \
      Assertion `cpu_model && cc->class_by_name' failed.

Regression test script included.

Fixes: 99193d8f ("cpu: drop unnecessary NULL check and cpu_common_class_by_name()")
Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
Message-Id: <20190418034501.5038-1-ehabkost@redhat.com>
Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
Tested-by: default avatarStefano Garzarella <sgarzare@redhat.com>
Signed-off-by: default avatarEduardo Habkost <ehabkost@redhat.com>
parent c1c8cfe5
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -991,6 +991,10 @@ const char *parse_cpu_option(const char *cpu_option)
    const char *cpu_type;

    model_pieces = g_strsplit(cpu_option, ",", 2);
    if (!model_pieces[0]) {
        error_report("-cpu option cannot be empty");
        exit(1);
    }

    oc = cpu_class_by_name(CPU_RESOLVING_TYPE, model_pieces[0]);
    if (oc == NULL) {
+19 −0
Original line number Diff line number Diff line
# Check for crash when using empty -cpu option
#
# Copyright (c) 2019 Red Hat, Inc.
#
# Author:
#  Eduardo Habkost <ehabkost@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2 or
# later.  See the COPYING file in the top-level directory.
import subprocess
from avocado_qemu import Test

class EmptyCPUModel(Test):
    def test(self):
        cmd = [self.qemu_bin, '-S', '-display', 'none', '-machine', 'none', '-cpu', '']
        r = subprocess.run(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
        self.assertEquals(r.returncode, 1, "QEMU exit code should be 1")
        self.assertEquals(r.stdout, b'', "QEMU stdout should be empty")
        self.assertNotEquals(r.stderr, b'', "QEMU stderr shouldn't be empty")