The write operation to "wdt->timeout" is protected by the lock on line 118, but the read operation to this data on line 105 is not protected by the lock. Thus, there may exist a data race for "wdt->timeout". To fix this data race, the read operation to "wdt->timeout" should be also protected by the lock. Signed-off-by: Jia-Ju Bai <baijiaju1990@xxxxxxxxx> --- drivers/watchdog/mena21_wdt.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/watchdog/mena21_wdt.c b/drivers/watchdog/mena21_wdt.c index 25d5d2b8cfbe..05ca69042829 100644 --- a/drivers/watchdog/mena21_wdt.c +++ b/drivers/watchdog/mena21_wdt.c @@ -102,14 +102,15 @@ static int a21_wdt_set_timeout(struct watchdog_device *wdt, return -EINVAL; } + mutex_lock(&drv->lock); + if (timeout == 30 && wdt->timeout == 1) { + mutex_unlock(&drv->lock); dev_err(wdt->parent, "Transition from fast to slow mode not allowed\n"); return -EINVAL; } - mutex_lock(&drv->lock); - if (timeout == 1) gpio_set_value(drv->gpios[GPIO_WD_FAST], 1); else -- 2.17.0 -- To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html