rtc: davinci: Initialize drvdata before registering device
Commit f44f7f96a2
("RTC: Initialize kernel state from RTC") uncovered
an issue in a number of RTC drivers, where the drivers call
rtc_device_register before initializing the device or platform drvdata.
This frequently results in null pointer dereferences when the
rtc_device_register immediately makes use of the rtc device, calling
rtc_read_alarm.
The solution is to ensure the drvdata is initialized prior to registering
the rtc device.
CC: Alessandro Zummo <a.zummo@towertech.it>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: rtc-linux@googlegroups.com
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
[fixed up commit log -jstultz]
Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
parent
5f54c8a00a
commit
f4e708ae8e
|
@ -524,6 +524,8 @@ static int __init davinci_rtc_probe(struct platform_device *pdev)
|
|||
goto fail2;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, davinci_rtc);
|
||||
|
||||
davinci_rtc->rtc = rtc_device_register(pdev->name, &pdev->dev,
|
||||
&davinci_rtc_ops, THIS_MODULE);
|
||||
if (IS_ERR(davinci_rtc->rtc)) {
|
||||
|
@ -553,8 +555,6 @@ static int __init davinci_rtc_probe(struct platform_device *pdev)
|
|||
|
||||
rtcss_write(davinci_rtc, PRTCSS_RTC_CCTRL_CAEN, PRTCSS_RTC_CCTRL);
|
||||
|
||||
platform_set_drvdata(pdev, davinci_rtc);
|
||||
|
||||
device_init_wakeup(&pdev->dev, 0);
|
||||
|
||||
return 0;
|
||||
|
@ -562,6 +562,7 @@ static int __init davinci_rtc_probe(struct platform_device *pdev)
|
|||
fail4:
|
||||
rtc_device_unregister(davinci_rtc->rtc);
|
||||
fail3:
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
iounmap(davinci_rtc->base);
|
||||
fail2:
|
||||
release_mem_region(davinci_rtc->pbase, davinci_rtc->base_size);
|
||||
|
|
Loading…
Reference in New Issue