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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Marc-André Lureau
						Marc-André Lureau