lkml.org 
[lkml]   [2011]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/11] rtc: rp5c01: Initialize drvdata before registering device
    Date
    Commit f44f7f96a20 ("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: Wolfram Sang <w.sang@pengutronix.de>
    CC: Alessandro Zummo <a.zummo@towertech.it>
    CC: Thomas Gleixner <tglx@linutronix.de>
    CC: rtc-linux@googlegroups.com
    Signed-off-by: John Stultz <john.stultz@linaro.org>
    ---
    drivers/rtc/rtc-rp5c01.c | 5 +++--
    1 files changed, 3 insertions(+), 2 deletions(-)

    diff --git a/drivers/rtc/rtc-rp5c01.c b/drivers/rtc/rtc-rp5c01.c
    index 694da39..359da6d 100644
    --- a/drivers/rtc/rtc-rp5c01.c
    +++ b/drivers/rtc/rtc-rp5c01.c
    @@ -249,15 +249,15 @@ static int __init rp5c01_rtc_probe(struct platform_device *dev)

    spin_lock_init(&priv->lock);

    + platform_set_drvdata(dev, priv);
    +
    rtc = rtc_device_register("rtc-rp5c01", &dev->dev, &rp5c01_rtc_ops,
    THIS_MODULE);
    if (IS_ERR(rtc)) {
    error = PTR_ERR(rtc);
    goto out_unmap;
    }
    -
    priv->rtc = rtc;
    - platform_set_drvdata(dev, priv);

    error = sysfs_create_bin_file(&dev->dev.kobj, &priv->nvram_attr);
    if (error)
    @@ -268,6 +268,7 @@ static int __init rp5c01_rtc_probe(struct platform_device *dev)
    out_unregister:
    rtc_device_unregister(rtc);
    out_unmap:
    + platform_set_drvdata(dev, NULL);
    iounmap(priv->regs);
    out_free_priv:
    kfree(priv);
    --
    1.7.3.2.146.gca209


    \
     
     \ /
      Last update: 2011-05-07 03:23    [W:6.598 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site