forked from mirrors/linux
		
	drivers core: Free dma_range_map when driver probe failed
There will be memory leak if driver probe failed. Trace as below:
  backtrace:
    [<000000002415258f>] kmemleak_alloc+0x3c/0x50
    [<00000000f447ebe4>] __kmalloc+0x208/0x530
    [<0000000048bc7b3a>] of_dma_get_range+0xe4/0x1b0
    [<0000000041e39065>] of_dma_configure_id+0x58/0x27c
    [<000000006356866a>] platform_dma_configure+0x2c/0x40
    ......
    [<000000000afcf9b5>] ret_from_fork+0x10/0x3c
This issue is introduced by commit e0d072782c73("dma-mapping:
introduce DMA range map, supplanting dma_pfn_offset "). It doesn't
free dma_range_map when driver probe failed and cause above
memory leak. So, add code to free it in error path.
Fixes: e0d072782c ("dma-mapping: introduce DMA range map, supplanting dma_pfn_offset ")
Cc: stable@vger.kernel.org
Signed-off-by: Meng Li <Meng.Li@windriver.com>
Link: https://lore.kernel.org/r/20210105070927.14968-1-Meng.Li@windriver.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									e71ba9452f
								
							
						
					
					
						commit
						d0243bbd5d
					
				
					 1 changed files with 2 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -619,6 +619,8 @@ static int really_probe(struct device *dev, struct device_driver *drv)
 | 
			
		|||
	else if (drv->remove)
 | 
			
		||||
		drv->remove(dev);
 | 
			
		||||
probe_failed:
 | 
			
		||||
	kfree(dev->dma_range_map);
 | 
			
		||||
	dev->dma_range_map = NULL;
 | 
			
		||||
	if (dev->bus)
 | 
			
		||||
		blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
 | 
			
		||||
					     BUS_NOTIFY_DRIVER_NOT_BOUND, dev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue