libvirt/SOURCES/libvirt-qemu-Refactor-default-panic-model.patch
eabdullin 3859a70eeb - qemu: Use pvpanic by default on aarch64
- qemu: Refactor default panic model
- qemu: Sometimes the default panic model doesn't exist
- udevListInterfaces: Honour array length for zero-length NULL
 arrays (CVE-2024-8235)
2024-10-04 15:37:34 +03:00

79 lines
2.7 KiB
Diff

From 9e1970efa5ac281febffabd57ac5b849117cccb4 Mon Sep 17 00:00:00 2001
From: Andrea Bolognani <abologna@redhat.com>
Date: Tue, 27 Aug 2024 15:03:31 +0200
Subject: [PATCH] qemu: Refactor default panic model
Perform decisions based on the architecture and machine type
in a single place instead of duplicating them.
This technically adds new behavior for MODEL_ISA in
qemuDomainDefAddDefaultDevices(), but it doesn't make any
difference functionally since we don't set addPanicDevice
outside of ppc64(le) and s390(x). If we did, the lack of
handling for that value would be a latent bug.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
---
src/qemu/qemu_domain.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 93dbbcbc0bc..69a2db686e6 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -4139,6 +4139,19 @@ qemuDomainGetSCSIControllerModel(const virDomainDef *def,
}
+static virDomainPanicModel
+qemuDomainDefaultPanicModel(const virDomainDef *def)
+{
+ if (qemuDomainIsPSeries(def))
+ return VIR_DOMAIN_PANIC_MODEL_PSERIES;
+
+ if (ARCH_IS_S390(def->os.arch))
+ return VIR_DOMAIN_PANIC_MODEL_S390;
+
+ return VIR_DOMAIN_PANIC_MODEL_ISA;
+}
+
+
static int
qemuDomainDefAddDefaultDevices(virQEMUDriver *driver,
virDomainDef *def,
@@ -4386,13 +4399,12 @@ qemuDomainDefAddDefaultDevices(virQEMUDriver *driver,
return -1;
if (addPanicDevice) {
+ virDomainPanicModel defaultModel = qemuDomainDefaultPanicModel(def);
size_t j;
+
for (j = 0; j < def->npanics; j++) {
if (def->panics[j]->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT ||
- (ARCH_IS_PPC64(def->os.arch) &&
- def->panics[j]->model == VIR_DOMAIN_PANIC_MODEL_PSERIES) ||
- (ARCH_IS_S390(def->os.arch) &&
- def->panics[j]->model == VIR_DOMAIN_PANIC_MODEL_S390))
+ def->panics[j]->model == defaultModel)
break;
}
@@ -6076,14 +6088,8 @@ static int
qemuDomainDevicePanicDefPostParse(virDomainPanicDef *panic,
const virDomainDef *def)
{
- if (panic->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT) {
- if (qemuDomainIsPSeries(def))
- panic->model = VIR_DOMAIN_PANIC_MODEL_PSERIES;
- else if (ARCH_IS_S390(def->os.arch))
- panic->model = VIR_DOMAIN_PANIC_MODEL_S390;
- else
- panic->model = VIR_DOMAIN_PANIC_MODEL_ISA;
- }
+ if (panic->model == VIR_DOMAIN_PANIC_MODEL_DEFAULT)
+ panic->model = qemuDomainDefaultPanicModel(def);
return 0;
}