blockdev: Plug memory leak in drive_init()
bs_opts is leaked on all paths from its qdev_new() that don't got through blockdev_init(). Add the missing QDECREF(), and zap bs_opts after blockdev_init(), so the new QDECREF() does nothing when we go through blockdev_init(). Leak introduced in commitf298d07. Spotted by Coverity. Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> (cherry picked from commit3cb0e25c4b) Conflicts: blockdev.c *fixed trivial context mismatch due to blockdev_init signature change Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									d2b987479a
								
							
						
					
					
						commit
						d1775fe94a
					
				| 
						 | 
				
			
			@ -868,6 +868,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
 | 
			
		|||
 | 
			
		||||
    /* Actual block device init: Functionality shared with blockdev-add */
 | 
			
		||||
    dinfo = blockdev_init(bs_opts, type, &local_err);
 | 
			
		||||
    bs_opts = NULL;
 | 
			
		||||
    if (dinfo == NULL) {
 | 
			
		||||
        if (error_is_set(&local_err)) {
 | 
			
		||||
            qerror_report_err(local_err);
 | 
			
		||||
| 
						 | 
				
			
			@ -904,6 +905,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
 | 
			
		|||
 | 
			
		||||
fail:
 | 
			
		||||
    qemu_opts_del(legacy_opts);
 | 
			
		||||
    QDECREF(bs_opts);
 | 
			
		||||
    return dinfo;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue