mirror of https://github.com/xqemu/xqemu.git
ivshmem: fix ivshmem-{plain,doorbell} crash without arg
"qemu -device ivshmem-{plain,doorbell}" will crash, because the device
doesn't check that the required argument is provided. (screwed up in
commit 5400c02
)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
d44122ecd0
commit
6dc64780c2
|
@ -872,6 +872,8 @@ static void ivshmem_common_realize(PCIDevice *dev, Error **errp)
|
||||||
s->ivshmem_bar2 = host_memory_backend_get_memory(s->hostmem,
|
s->ivshmem_bar2 = host_memory_backend_get_memory(s->hostmem,
|
||||||
&error_abort);
|
&error_abort);
|
||||||
} else {
|
} else {
|
||||||
|
assert(s->server_chr);
|
||||||
|
|
||||||
IVSHMEM_DPRINTF("using shared memory server (socket = %s)\n",
|
IVSHMEM_DPRINTF("using shared memory server (socket = %s)\n",
|
||||||
s->server_chr->filename);
|
s->server_chr->filename);
|
||||||
|
|
||||||
|
@ -1051,10 +1053,24 @@ static void ivshmem_plain_init(Object *obj)
|
||||||
&error_abort);
|
&error_abort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ivshmem_plain_realize(PCIDevice *dev, Error **errp)
|
||||||
|
{
|
||||||
|
IVShmemState *s = IVSHMEM_COMMON(dev);
|
||||||
|
|
||||||
|
if (!s->hostmem) {
|
||||||
|
error_setg(errp, "You must specify a 'memdev'");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ivshmem_common_realize(dev, errp);
|
||||||
|
}
|
||||||
|
|
||||||
static void ivshmem_plain_class_init(ObjectClass *klass, void *data)
|
static void ivshmem_plain_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||||
|
|
||||||
|
k->realize = ivshmem_plain_realize;
|
||||||
dc->props = ivshmem_plain_properties;
|
dc->props = ivshmem_plain_properties;
|
||||||
dc->vmsd = &ivshmem_plain_vmsd;
|
dc->vmsd = &ivshmem_plain_vmsd;
|
||||||
}
|
}
|
||||||
|
@ -1099,10 +1115,24 @@ static void ivshmem_doorbell_init(Object *obj)
|
||||||
s->legacy_size = SIZE_MAX; /* whatever the server sends */
|
s->legacy_size = SIZE_MAX; /* whatever the server sends */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ivshmem_doorbell_realize(PCIDevice *dev, Error **errp)
|
||||||
|
{
|
||||||
|
IVShmemState *s = IVSHMEM_COMMON(dev);
|
||||||
|
|
||||||
|
if (!s->server_chr) {
|
||||||
|
error_setg(errp, "You must specify a 'chardev'");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ivshmem_common_realize(dev, errp);
|
||||||
|
}
|
||||||
|
|
||||||
static void ivshmem_doorbell_class_init(ObjectClass *klass, void *data)
|
static void ivshmem_doorbell_class_init(ObjectClass *klass, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||||
|
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||||
|
|
||||||
|
k->realize = ivshmem_doorbell_realize;
|
||||||
dc->props = ivshmem_doorbell_properties;
|
dc->props = ivshmem_doorbell_properties;
|
||||||
dc->vmsd = &ivshmem_doorbell_vmsd;
|
dc->vmsd = &ivshmem_doorbell_vmsd;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue