virtio-input: free config list

Clear the list when finalizing. The list is created during realize with
virtio_input_idstr_config() and later by further calls to
virtio_input_init_config() and virtio_input_add_config().

This leak can be reproduced with device-introspect-test -p
/x86_64/device/introspect/concrete.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Marc-André Lureau 2016-07-15 10:55:12 +02:00
parent df37dd6ffe
commit 0137a557aa
1 changed files with 11 additions and 0 deletions

View File

@ -270,6 +270,16 @@ static void virtio_input_device_realize(DeviceState *dev, Error **errp)
vinput->sts = virtio_add_queue(vdev, 64, virtio_input_handle_sts);
}
static void virtio_input_finalize(Object *obj)
{
VirtIOInput *vinput = VIRTIO_INPUT(obj);
VirtIOInputConfig *cfg, *next;
QTAILQ_FOREACH_SAFE(cfg, &vinput->cfg_list, node, next) {
QTAILQ_REMOVE(&vinput->cfg_list, cfg, node);
g_free(cfg);
}
}
static void virtio_input_device_unrealize(DeviceState *dev, Error **errp)
{
VirtIOInputClass *vic = VIRTIO_INPUT_GET_CLASS(dev);
@ -318,6 +328,7 @@ static const TypeInfo virtio_input_info = {
.class_size = sizeof(VirtIOInputClass),
.class_init = virtio_input_class_init,
.abstract = true,
.instance_finalize = virtio_input_finalize,
};
/* ----------------------------------------------------------------- */