rtc: mxc_v2: unlock on error in mxc_rtc_set_alarm()

Message ID 20180314073719.GA2470@mwanda
State Rejected
Headers show
Series
  • rtc: mxc_v2: unlock on error in mxc_rtc_set_alarm()
Related show

Commit Message

Dan Carpenter March 14, 2018, 7:37 a.m.
We need to unlock if time is more than U32_MAX.

Fixes: 83c880f79e88 ("rtc: add mxc driver for i.MX53 SRTC")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

Comments

Patrick Brünn March 15, 2018, 11:12 a.m. | #1
>From: Dan Carpenter [mailto:dan.carpenter@oracle.com]
>Sent: Mittwoch, 14. März 2018 08:37
>
>We need to unlock if time is more than U32_MAX.
>
you are right, that's a bug.
But I would move the mxc_rtc_lock() entirely behind the (time > U32_MAX) check. IMHO that would make the code even cleaner. sorry for broken patch:

>       const time64_t time = rtc_tm_to_time64(&alrm->time);
>       struct mxc_rtc_data *pdata = dev_get_drvdata(dev);
>-      int ret = mxc_rtc_lock(pdata);
>+      int ret;
>-
>-      if (ret)
>-              return ret;
>
>       if (time > U32_MAX) {
>               dev_err(dev, "Hopefully I am out of service by then :-(\n");
>               return -EINVAL;
>       }
>+
>+      ret = mxc_rtc_lock(pdata);
>+      if (ret)
>+              return ret;

---
Beckhoff Automation GmbH & Co. KG | Managing Director: Dipl. Phys. Hans Beckhoff
Registered office: Verl, Germany | Register court: Guetersloh HRA 7075
Dan Carpenter March 15, 2018, 11:26 a.m. | #2
On Thu, Mar 15, 2018 at 11:12:04AM +0000, Patrick Brünn wrote:
> >From: Dan Carpenter [mailto:dan.carpenter@oracle.com]
> >Sent: Mittwoch, 14. März 2018 08:37
> >
> >We need to unlock if time is more than U32_MAX.
> >
> you are right, that's a bug.
> But I would move the mxc_rtc_lock() entirely behind the (time > U32_MAX) check.

Yes, of course.  I will resend.

regards,
dan carpenter

Patch

diff --git a/drivers/rtc/rtc-mxc_v2.c b/drivers/rtc/rtc-mxc_v2.c
index 9e14efb990b2..90c9ab68688f 100644
--- a/drivers/rtc/rtc-mxc_v2.c
+++ b/drivers/rtc/rtc-mxc_v2.c
@@ -243,12 +243,14 @@  static int mxc_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
 {
 	const time64_t time = rtc_tm_to_time64(&alrm->time);
 	struct mxc_rtc_data *pdata = dev_get_drvdata(dev);
-	int ret = mxc_rtc_lock(pdata);
+	int ret;
 
+	ret = mxc_rtc_lock(pdata);
 	if (ret)
 		return ret;
 
 	if (time > U32_MAX) {
+		mxc_rtc_unlock(pdata);
 		dev_err(dev, "Hopefully I am out of service by then :-(\n");
 		return -EINVAL;
 	}