yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
ddf19c
From c82cf5c08617c947b34eb490d1714729103e3379 Mon Sep 17 00:00:00 2001
ddf19c
From: Andrew Jones <drjones@redhat.com>
ddf19c
Date: Mon, 10 Feb 2020 17:33:57 +0000
ddf19c
Subject: [PATCH 17/18] target/arm/monitor: query-cpu-model-expansion crashed
ddf19c
 qemu when using machine type none
ddf19c
MIME-Version: 1.0
ddf19c
Content-Type: text/plain; charset=UTF-8
ddf19c
Content-Transfer-Encoding: 8bit
ddf19c
ddf19c
RH-Author: Andrew Jones <drjones@redhat.com>
ddf19c
Message-id: <20200210173358.16896-2-drjones@redhat.com>
ddf19c
Patchwork-id: 93773
ddf19c
O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH 1/2] target/arm/monitor: query-cpu-model-expansion crashed qemu when using machine type none
ddf19c
Bugzilla: 1801320
ddf19c
RH-Acked-by: Auger Eric <eric.auger@redhat.com>
ddf19c
RH-Acked-by: Gavin Shan <gshan@redhat.com>
ddf19c
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
ddf19c
ddf19c
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1801320
ddf19c
ddf19c
Author: Liang Yan <lyan@suse.com>
ddf19c
Date:   Fri, 07 Feb 2020 14:04:21 +0000
ddf19c
ddf19c
    target/arm/monitor: query-cpu-model-expansion crashed qemu when using machine type none
ddf19c
ddf19c
    Commit e19afd566781 mentioned that target-arm only supports queryable
ddf19c
    cpu models 'max', 'host', and the current type when KVM is in use.
ddf19c
    The logic works well until using machine type none.
ddf19c
ddf19c
    For machine type none, cpu_type will be null if cpu option is not
ddf19c
    set by command line, strlen(cpu_type) will terminate process.
ddf19c
    So We add a check above it.
ddf19c
ddf19c
    This won't affect i386 and s390x since they do not use current_cpu.
ddf19c
ddf19c
    Signed-off-by: Liang Yan <lyan@suse.com>
ddf19c
    Message-id: 20200203134251.12986-1-lyan@suse.com
ddf19c
    Reviewed-by: Andrew Jones <drjones@redhat.com>
ddf19c
    Tested-by: Andrew Jones <drjones@redhat.com>
ddf19c
    Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
ddf19c
ddf19c
(cherry picked from commit 0999a4ba8718aa96105b978d3567fc7e90244c7e)
ddf19c
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
ddf19c
---
ddf19c
 target/arm/monitor.c | 15 +++++++++------
ddf19c
 1 file changed, 9 insertions(+), 6 deletions(-)
ddf19c
ddf19c
diff --git a/target/arm/monitor.c b/target/arm/monitor.c
ddf19c
index 9725dff..c2dc790 100644
ddf19c
--- a/target/arm/monitor.c
ddf19c
+++ b/target/arm/monitor.c
ddf19c
@@ -137,17 +137,20 @@ CpuModelExpansionInfo *qmp_query_cpu_model_expansion(CpuModelExpansionType type,
ddf19c
     }
ddf19c
 
ddf19c
     if (kvm_enabled()) {
ddf19c
-        const char *cpu_type = current_machine->cpu_type;
ddf19c
-        int len = strlen(cpu_type) - strlen(ARM_CPU_TYPE_SUFFIX);
ddf19c
         bool supported = false;
ddf19c
 
ddf19c
         if (!strcmp(model->name, "host") || !strcmp(model->name, "max")) {
ddf19c
             /* These are kvmarm's recommended cpu types */
ddf19c
             supported = true;
ddf19c
-        } else if (strlen(model->name) == len &&
ddf19c
-                   !strncmp(model->name, cpu_type, len)) {
ddf19c
-            /* KVM is enabled and we're using this type, so it works. */
ddf19c
-            supported = true;
ddf19c
+        } else if (current_machine->cpu_type) {
ddf19c
+            const char *cpu_type = current_machine->cpu_type;
ddf19c
+            int len = strlen(cpu_type) - strlen(ARM_CPU_TYPE_SUFFIX);
ddf19c
+
ddf19c
+            if (strlen(model->name) == len &&
ddf19c
+                !strncmp(model->name, cpu_type, len)) {
ddf19c
+                /* KVM is enabled and we're using this type, so it works. */
ddf19c
+                supported = true;
ddf19c
+            }
ddf19c
         }
ddf19c
         if (!supported) {
ddf19c
             error_setg(errp, "We cannot guarantee the CPU type '%s' works "
ddf19c
-- 
ddf19c
1.8.3.1
ddf19c