Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755552AbeAHGA7 (ORCPT + 1 other); Mon, 8 Jan 2018 01:00:59 -0500 Received: from mail-ot0-f193.google.com ([74.125.82.193]:38498 "EHLO mail-ot0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755455AbeAHGA5 (ORCPT ); Mon, 8 Jan 2018 01:00:57 -0500 X-Google-Smtp-Source: ACJfBouohV4gWH65StMCh4gXivJqcHPqkTJH3RtaWWWS+hEi3wj6YGX22b86AR8V7fdszst6SmH7yTqqhviyAnOGv1s= MIME-Version: 1.0 In-Reply-To: References: From: Baolin Wang Date: Mon, 8 Jan 2018 14:00:56 +0800 Message-ID: Subject: Re: [PATCH] rtc: Fix overflow when converting time64_t to rtc_time To: Alessandro Zummo , Alexandre Belloni Cc: Arnd Bergmann , Mark Brown , linux-rtc@vger.kernel.org, LKML , Baolin Wang Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: Hi Alexandre, On 25 December 2017 at 19:10, Baolin Wang wrote: > If we convert one large time values to rtc_time, in the original formula > 'days * 86400' can be overflowed in 'unsigned int' type to make the formula > get one incorrect remain seconds value. Thus we can use div_s64_rem() > function to avoid this situation. > > Signed-off-by: Baolin Wang Could you apply this patch if there are no other comments? Thanks. > --- > drivers/rtc/rtc-lib.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c > index 1ae7da5..ad5bb21 100644 > --- a/drivers/rtc/rtc-lib.c > +++ b/drivers/rtc/rtc-lib.c > @@ -52,13 +52,11 @@ int rtc_year_days(unsigned int day, unsigned int month, unsigned int year) > */ > void rtc_time64_to_tm(time64_t time, struct rtc_time *tm) > { > - unsigned int month, year; > - unsigned long secs; > + unsigned int month, year, secs; > int days; > > /* time must be positive */ > - days = div_s64(time, 86400); > - secs = time - (unsigned int) days * 86400; > + days = div_s64_rem(time, 86400, &secs); > > /* day of the week, 1970-01-01 was a Thursday */ > tm->tm_wday = (days + 4) % 7; > -- > 1.7.9.5 > -- Baolin.wang Best Regards