Message ID | 20190927110446.GA6289@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | rtc: use timeu64_t for range_max | expand |
On 27/09/2019 13:04:46+0200, Emmanuel Nicolet wrote: > Hi, > for rtc drivers where rtc->range_max is set U64_MAX, like the PS3 rtc, > rtc_valid_range() always returns -ERANGE. This is because the local > variable range_max has type time64_t, so the test > if (time < range_min || time > range_max) > return -ERANGE; > becomes (time < range_min || time > -1), which always evaluates to true. > timeu64_t should be used, since it's the type of rtc->range_max. > > Signed-off-by: Emmanuel Nicolet <emmanuel.nicolet@gmail.com> > --- > drivers/rtc/interface.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > Applied, thanks.
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index c93ef33b01d3..eea700723976 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -70,7 +70,7 @@ static int rtc_valid_range(struct rtc_device *rtc, struct rtc_time *tm) time64_t time = rtc_tm_to_time64(tm); time64_t range_min = rtc->set_start_time ? rtc->start_secs : rtc->range_min; - time64_t range_max = rtc->set_start_time ? + timeu64_t range_max = rtc->set_start_time ? (rtc->start_secs + rtc->range_max - rtc->range_min) : rtc->range_max;
Hi, for rtc drivers where rtc->range_max is set U64_MAX, like the PS3 rtc, rtc_valid_range() always returns -ERANGE. This is because the local variable range_max has type time64_t, so the test if (time < range_min || time > range_max) return -ERANGE; becomes (time < range_min || time > -1), which always evaluates to true. timeu64_t should be used, since it's the type of rtc->range_max. Signed-off-by: Emmanuel Nicolet <emmanuel.nicolet@gmail.com> --- drivers/rtc/interface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)