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:
		
							parent
							
								
									df37dd6ffe
								
							
						
					
					
						commit
						0137a557aa
					
				| 
						 | 
				
			
			@ -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,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* ----------------------------------------------------------------- */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue