mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 12:35:17 +00:00
qemu: use default machine type if missing it in qemu command line
BZ:https://bugzilla.redhat.com/show_bug.cgi?id=871273 when using virsh qemu-attach to attach an existing qemu process, if it misses the -M option in qemu command line, libvirtd crashed because the NULL value of def->os.machine in later use. Example: /usr/libexec/qemu-kvm -name foo \ -cdrom /var/lib/libvirt/images/boot.img \ -monitor unix:/tmp/demo,server,nowait \ error: End of file while reading data: Input/output error error: Failed to reconnect to the hypervisor This patch tries to set default machine type if the value of def->os.machine is still NULL after qemu command line parsing.
This commit is contained in:
parent
2b435c153e
commit
1851a0c864
@ -1845,10 +1845,12 @@ no_memory:
|
||||
|
||||
const char *qemuCapsGetCanonicalMachine(qemuCapsPtr caps,
|
||||
const char *name)
|
||||
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (!name)
|
||||
return NULL;
|
||||
|
||||
for (i = 0 ; i < caps->nmachineTypes ; i++) {
|
||||
if (!caps->machineAliases[i])
|
||||
continue;
|
||||
|
@ -8768,6 +8768,17 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps,
|
||||
}
|
||||
}
|
||||
|
||||
if (!def->os.machine) {
|
||||
const char *defaultMachine =
|
||||
virCapabilitiesDefaultGuestMachine(caps,
|
||||
def->os.type,
|
||||
def->os.arch,
|
||||
virDomainVirtTypeToString(def->virtType));
|
||||
if (defaultMachine != NULL)
|
||||
if (!(def->os.machine = strdup(defaultMachine)))
|
||||
goto no_memory;
|
||||
}
|
||||
|
||||
if (!nographics && def->ngraphics == 0) {
|
||||
virDomainGraphicsDefPtr sdl;
|
||||
const char *display = qemuFindEnv(progenv, "DISPLAY");
|
||||
|
@ -1517,9 +1517,12 @@ static int qemudNumDomains(virConnectPtr conn) {
|
||||
static int
|
||||
qemuCanonicalizeMachine(virDomainDefPtr def, qemuCapsPtr caps)
|
||||
{
|
||||
const char *canon = qemuCapsGetCanonicalMachine(caps, def->os.machine);
|
||||
const char *canon;
|
||||
|
||||
if (canon != def->os.machine) {
|
||||
if (!(canon = qemuCapsGetCanonicalMachine(caps, def->os.machine)))
|
||||
return 0;
|
||||
|
||||
if (STRNEQ(canon, def->os.machine)) {
|
||||
char *tmp;
|
||||
if (!(tmp = strdup(canon))) {
|
||||
virReportOOMError();
|
||||
|
Loading…
x
Reference in New Issue
Block a user