forked from mirrors/linux
		
	mtd: rawnand: jz4780: fix possible object reference leak
of_find_device_by_node() takes a reference to the struct device
when it finds a match via get_device, there is no need to call
get_device() twice.
We also should make sure to drop the reference to the device
taken by of_find_device_by_node() on driver unbind.
Fixes: ae02ab00aa ("mtd: nand: jz4780: driver for NAND devices on JZ4780 SoCs")
Signed-off-by: Wen Yang <yellowriver2010@hotmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
			
			
This commit is contained in:
		
							parent
							
								
									a12085d139
								
							
						
					
					
						commit
						11493f2685
					
				
					 1 changed files with 6 additions and 3 deletions
				
			
		| 
						 | 
					@ -281,12 +281,15 @@ static struct jz4780_bch *jz4780_bch_get(struct device_node *np)
 | 
				
			||||||
	struct jz4780_bch *bch;
 | 
						struct jz4780_bch *bch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pdev = of_find_device_by_node(np);
 | 
						pdev = of_find_device_by_node(np);
 | 
				
			||||||
	if (!pdev || !platform_get_drvdata(pdev))
 | 
						if (!pdev)
 | 
				
			||||||
		return ERR_PTR(-EPROBE_DEFER);
 | 
							return ERR_PTR(-EPROBE_DEFER);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	get_device(&pdev->dev);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	bch = platform_get_drvdata(pdev);
 | 
						bch = platform_get_drvdata(pdev);
 | 
				
			||||||
 | 
						if (!bch) {
 | 
				
			||||||
 | 
							put_device(&pdev->dev);
 | 
				
			||||||
 | 
							return ERR_PTR(-EPROBE_DEFER);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	clk_prepare_enable(bch->clk);
 | 
						clk_prepare_enable(bch->clk);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return bch;
 | 
						return bch;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue