[libvirt] [PATCH] qemu: Fix serial stub console allocation

When adding the aliased serial stub console, the structure wasn't properly allocated (VIR_ALLOC instead of virDomainChrDefNew) which then resulted in SIGSEGV in virDomainChrSourceIsEqual during a serial device coldplug. https://bugzilla.redhat.com/show_bug.cgi?id=1434278 Signed-off-by: Erik Skultety <eskultet@redhat.com> --- src/qemu/qemu_hotplug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 4a7d99725..34ddb95f8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1810,7 +1810,7 @@ qemuDomainChrPreInsert(virDomainDefPtr vmdef, if (!vmdef->consoles && VIR_ALLOC(vmdef->consoles) < 0) return -1; - if (VIR_ALLOC(vmdef->consoles[0]) < 0) { + if (!(vmdef->consoles[0] = virDomainChrDefNew(NULL))) { VIR_FREE(vmdef->consoles); return -1; } @@ -1841,7 +1841,7 @@ qemuDomainChrInsertPreAllocCleanup(virDomainDefPtr vmdef, /* Remove the stub console added by qemuDomainChrPreInsert */ if (vmdef->nserials == 0 && vmdef->nconsoles == 1 && chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL) { - VIR_FREE(vmdef->consoles[0]); + virDomainChrDefFree(vmdef->consoles[0]); VIR_FREE(vmdef->consoles); vmdef->nconsoles = 0; } -- 2.13.0

On Mon, May 29, 2017 at 13:11:09 +0200, Erik Skultety wrote:
When adding the aliased serial stub console, the structure wasn't properly allocated (VIR_ALLOC instead of virDomainChrDefNew) which then resulted in SIGSEGV in virDomainChrSourceIsEqual during a serial device coldplug.
https://bugzilla.redhat.com/show_bug.cgi?id=1434278
Signed-off-by: Erik Skultety <eskultet@redhat.com> --- src/qemu/qemu_hotplug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 4a7d99725..34ddb95f8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1810,7 +1810,7 @@ qemuDomainChrPreInsert(virDomainDefPtr vmdef, if (!vmdef->consoles && VIR_ALLOC(vmdef->consoles) < 0) return -1;
- if (VIR_ALLOC(vmdef->consoles[0]) < 0) { + if (!(vmdef->consoles[0] = virDomainChrDefNew(NULL))) {
With this the code will not call qemuDomainChrSourcePrivateNew in the qemu driver, which is called everywhere. Are you sure this is okay? If so please add a comment that xmlopt is not necessary here. Otherwise it should be simple to pass xmlopt here.

On Mon, May 29, 2017 at 02:33:04PM +0200, Peter Krempa wrote:
On Mon, May 29, 2017 at 13:11:09 +0200, Erik Skultety wrote:
When adding the aliased serial stub console, the structure wasn't properly allocated (VIR_ALLOC instead of virDomainChrDefNew) which then resulted in SIGSEGV in virDomainChrSourceIsEqual during a serial device coldplug.
https://bugzilla.redhat.com/show_bug.cgi?id=1434278
Signed-off-by: Erik Skultety <eskultet@redhat.com> --- src/qemu/qemu_hotplug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 4a7d99725..34ddb95f8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1810,7 +1810,7 @@ qemuDomainChrPreInsert(virDomainDefPtr vmdef, if (!vmdef->consoles && VIR_ALLOC(vmdef->consoles) < 0) return -1;
- if (VIR_ALLOC(vmdef->consoles[0]) < 0) { + if (!(vmdef->consoles[0] = virDomainChrDefNew(NULL))) {
With this the code will not call qemuDomainChrSourcePrivateNew in the qemu driver, which is called everywhere. Are you sure this is okay? If so please add a comment that xmlopt is not necessary here.
I hopefully checked all places where we're handling char devices and when dealing with consoles, we always special case the backcompat serial console 0 in a way where instead of the console's own def, we rather pass the serial[0]'s data. I'll add a comment as suggested. Erik
Otherwise it should be simple to pass xmlopt here.
participants (2)
-
Erik Skultety
-
Peter Krempa