Skip to content

Commit

Permalink
rtc: mxc_v2: fix possible race condition
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
alexandrebelloni committed May 19, 2018
1 parent d759924 commit 5490a1e
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions drivers/rtc/rtc-mxc_v2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand All @@ -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)
Expand Down

0 comments on commit 5490a1e

Please sign in to comment.