From: Jia-Ju Bai Date: Wed, 13 Dec 2017 13:56:04 +0000 (+0800) Subject: rtc: r7301: Fix a possible sleep-in-atomic bug in rtc7301_set_time X-Git-Tag: v4.16-rc1~91^2~8 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=298c8545206b2dd963079ff48fafd909e099856e;p=linux.git rtc: r7301: Fix a possible sleep-in-atomic bug in rtc7301_set_time The driver may sleep under a spinlock. The function call path is: rtc7301_set_time (acquire the spinlock) usleep_range --> may sleep To fix it, usleep_range is replaced with udelay. This bug is found by my static analysis tool(DSAC) and checked by my code review. Signed-off-by: Jia-Ju Bai Signed-off-by: Alexandre Belloni --- diff --git a/drivers/rtc/rtc-r7301.c b/drivers/rtc/rtc-r7301.c index d846e9703ad6..500e8c8a2605 100644 --- a/drivers/rtc/rtc-r7301.c +++ b/drivers/rtc/rtc-r7301.c @@ -235,7 +235,7 @@ static int rtc7301_set_time(struct device *dev, struct rtc_time *tm) spin_lock_irqsave(&priv->lock, flags); rtc7301_stop(priv); - usleep_range(200, 300); + udelay(300); rtc7301_select_bank(priv, 0); rtc7301_write_time(priv, tm, false); rtc7301_start(priv);