mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	rtc: mxc_v2: fix possible race condition
The IRQ is requested before the struct rtc is allocated and registered, but this struct is used in the IRQ handler. This may lead to a NULL pointer dereference. Switch to devm_rtc_allocate_device/rtc_register_device to allocate the rtc before requesting the IRQ. Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
		
							parent
							
								
									d759924500
								
							
						
					
					
						commit
						5490a1e018
					
				
					 1 changed files with 9 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -343,6 +343,12 @@ static int mxc_rtc_probe(struct platform_device *pdev)
 | 
			
		|||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pdata->rtc = devm_rtc_allocate_device(&pdev->dev);
 | 
			
		||||
	if (IS_ERR(pdata->rtc))
 | 
			
		||||
		return PTR_ERR(pdata->rtc);
 | 
			
		||||
 | 
			
		||||
	pdata->rtc->ops = &mxc_rtc_ops;
 | 
			
		||||
 | 
			
		||||
	clk_disable(pdata->clk);
 | 
			
		||||
	platform_set_drvdata(pdev, pdata);
 | 
			
		||||
	ret =
 | 
			
		||||
| 
						 | 
				
			
			@ -354,15 +360,11 @@ static int mxc_rtc_probe(struct platform_device *pdev)
 | 
			
		|||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pdata->rtc =
 | 
			
		||||
	    devm_rtc_device_register(&pdev->dev, pdev->name, &mxc_rtc_ops,
 | 
			
		||||
				     THIS_MODULE);
 | 
			
		||||
	if (IS_ERR(pdata->rtc)) {
 | 
			
		||||
	ret = rtc_register_device(pdata->rtc);
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		clk_unprepare(pdata->clk);
 | 
			
		||||
		return PTR_ERR(pdata->rtc);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int mxc_rtc_remove(struct platform_device *pdev)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue