Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp1453922pxv; Fri, 23 Jul 2021 08:40:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzYPvs9VDJxTkKYmaI4EidTl6Wk6a/76KoJVaGg2lOSvsqdrZCAxeXVGvh3/RWb5fcFU9B1 X-Received: by 2002:a5d:8b51:: with SMTP id c17mr484356iot.119.1627054830085; Fri, 23 Jul 2021 08:40:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627054830; cv=none; d=google.com; s=arc-20160816; b=mF8McNysW6zMNrA7A9jRY4I5sC5z3vCwLq4pPUNqKkxtVeu56t/W3nBedUK6LYzRr7 0ha7QhwwltMuMLtwxe3K+rHIU+Pw+ZlhL1TWYDxSFREMbxlzdyaKLTutoTLYUX6sVYhG rRfgjcTy7ygsIZc17cq5VymH1wnUjv8v23r4H5VWVpbyJ8rqBTJ88CYnlJR4/8bCGJCo P3WmRxdFwXXVaA5u9JNzkTvDwTcV+ps65FZlCmIIHFln9toEQFiw+3hJk0ceYTJ88J2k fyciUN4wlvG/cFpO6fpY+icwv/65uS3X35bEy2ZvhO0xErY6ocODlmwU+BiLAzS1hfPQ 9LGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=zitoOGdOycTXQSKnw6cj72JwNYuuqCQr+FIH23F98rE=; b=w7I0T7WLvQnouyAQzQUm1Hl//KtoIou9m6xIQ50+vehPLNx2PEEBZYK7zbBdRPhrgA 9SYtGmejlW9e+RBGt/H/eIBZ7nDVmOWRHzJ4rjKovc1b0j7eFYPrcacXb81HrVUK/U2x S/ftV7d2+7OTGvZrFnY1whTtdJFcgUD28rDl4hkvpxO4BLsnQIkaP1fKeYpnidrLjTxM YFvbl/HlBb5NdwCVnKHtMC3sJMWeQKvaGx+XzrsWTCZX/L6X23kH+4xnGJTDYOoqteGw JcQSHEvkXNE9/1FMJZCycLncm5/fyoZDQmSsHY1hTeq6SZjWF1OgwH2ooPOoM58GZlg6 A/7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j25si21886488jaj.93.2021.07.23.08.40.18; Fri, 23 Jul 2021 08:40:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235632AbhGWO6x (ORCPT + 99 others); Fri, 23 Jul 2021 10:58:53 -0400 Received: from foss.arm.com ([217.140.110.172]:47646 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235611AbhGWO6t (ORCPT ); Fri, 23 Jul 2021 10:58:49 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4086C142F; Fri, 23 Jul 2021 08:39:22 -0700 (PDT) Received: from localhost.localdomain (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2CC893F73D; Fri, 23 Jul 2021 08:39:20 -0700 (PDT) From: Andre Przywara To: Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec Cc: Rob Herring , Icenowy Zheng , Samuel Holland , linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Ondrej Jirman , Alessandro Zummo , Alexandre Belloni , linux-rtc@vger.kernel.org Subject: [PATCH v8 03/11] rtc: sun6i: Fix time overflow handling Date: Fri, 23 Jul 2021 16:38:30 +0100 Message-Id: <20210723153838.6785-4-andre.przywara@arm.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20210723153838.6785-1-andre.przywara@arm.com> References: <20210723153838.6785-1-andre.przywara@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Using "unsigned long" for UNIX timestamps is never a good idea, and comparing the value of such a variable against U32_MAX does not do anything useful on 32-bit systems. Use the proper time64_t type when dealing with timestamps, and avoid cutting down the time range unnecessarily. This also fixes the flawed check for the alarm time being too far into the future. The check for this condition is actually somewhat theoretical, as the RTC counts till 2033 only anyways, and 2^32 seconds from now is not before the year 2157 - at which point I hope nobody will be using this hardware anymore. Signed-off-by: Andre Przywara --- drivers/rtc/rtc-sun6i.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c index adec1b14a8de..c551ebf0ac00 100644 --- a/drivers/rtc/rtc-sun6i.c +++ b/drivers/rtc/rtc-sun6i.c @@ -138,7 +138,7 @@ struct sun6i_rtc_dev { const struct sun6i_rtc_clk_data *data; void __iomem *base; int irq; - unsigned long alarm; + time64_t alarm; struct clk_hw hw; struct clk_hw *int_osc; @@ -510,10 +510,8 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm) struct sun6i_rtc_dev *chip = dev_get_drvdata(dev); struct rtc_time *alrm_tm = &wkalrm->time; struct rtc_time tm_now; - unsigned long time_now = 0; - unsigned long time_set = 0; - unsigned long time_gap = 0; - int ret = 0; + time64_t time_now, time_set; + int ret; ret = sun6i_rtc_gettime(dev, &tm_now); if (ret < 0) { @@ -528,9 +526,7 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm) return -EINVAL; } - time_gap = time_set - time_now; - - if (time_gap > U32_MAX) { + if ((time_set - time_now) > U32_MAX) { dev_err(dev, "Date too far in the future\n"); return -EINVAL; } @@ -539,7 +535,7 @@ static int sun6i_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm) writel(0, chip->base + SUN6I_ALRM_COUNTER); usleep_range(100, 300); - writel(time_gap, chip->base + SUN6I_ALRM_COUNTER); + writel(time_set - time_now, chip->base + SUN6I_ALRM_COUNTER); chip->alarm = time_set; sun6i_rtc_setaie(wkalrm->enabled, chip); -- 2.17.6