From patchwork Mon May 21 16:42:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brian Norris X-Patchwork-Id: 917736 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-rtc-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="JN/ri2D+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40qPhb2cpRz9s37 for ; Tue, 22 May 2018 02:42:39 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753212AbeEUQmi (ORCPT ); Mon, 21 May 2018 12:42:38 -0400 Received: from mail-pl0-f68.google.com ([209.85.160.68]:45332 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752882AbeEUQmh (ORCPT ); Mon, 21 May 2018 12:42:37 -0400 Received: by mail-pl0-f68.google.com with SMTP id bi12-v6so9103800plb.12 for ; Mon, 21 May 2018 09:42:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id; bh=LkSGJ7ur74bwD1/+ZB43wTevKIYSIHvdeRBRhH6KToc=; b=JN/ri2D+ujYpfSEqSiFp1aExgTzxAHNccAJJ9DkNOjDP9D67K01auLdtBL0f/hBHMW vbyvoqch6v4VlRgxvpKV+RKCEDSfaSnzF+dbHarUPZa86M/XeLcqOEHsFqTSTFVLZHzN N48KjX+V9T9Q+pdl5klGUtRQxjieOLiD90xAo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=LkSGJ7ur74bwD1/+ZB43wTevKIYSIHvdeRBRhH6KToc=; b=n4rJ0pwZVShK+/Yf86Om2j7I/mllHBg9m/n+kgiGPVS587TMxL9WRVAlQMSIbpQtrQ FwjJkbSLoBtEbW4bjXfypGlupWyLXETtcUzDVApvoAh8WCKj6dVSqHD2nTtlCg99LShO zge17rc45QK1qbnQgV8o3AycHeWi/5l6yA1LhQkpE/GQt0vtAaLsJ+99ELhFAp/RlOZ6 IdUSfVqws/QM05FWX0E4w2MU0xX/7Ojy1tJcQ5IJOTbvUPgAArLi7P6IuvaxQBI1ltm8 CV4Pfc6D8uWzy2Gs/dd9CEV33oLN0IM6E8+imETBfUpJ3spd7xS6bb2gNwv3XLupMDCW rkxA== X-Gm-Message-State: ALKqPwdSnPJ8DdVU9L668j61q+rwC1Go8dm3F8XLWLWJCPkpKbByM/s+ YK7zcEcbNsN8EmLHNIlnNp0FUA== X-Google-Smtp-Source: AB8JxZrp5gm1juOBEdM5yhnghkTWWIdlPhSCPyOzdfnyO2bKWtGOkpxRrUe3f9+lnwu/ek9e3N/2fg== X-Received: by 2002:a17:902:70c4:: with SMTP id l4-v6mr21205097plt.174.1526920957028; Mon, 21 May 2018 09:42:37 -0700 (PDT) Received: from ban.mtv.corp.google.com ([2620:0:1000:1501:bc2f:3082:9938:5d41]) by smtp.gmail.com with ESMTPSA id k63-v6sm38840343pfk.90.2018.05.21.09.42.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 May 2018 09:42:35 -0700 (PDT) From: Brian Norris To: Alessandro Zummo , Alexandre Belloni Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org, Jeffy Chen , Matthias Kaehlcke , Brian Norris Subject: [PATCH] rtc: report time-retrieval errors when updating alarm Date: Mon, 21 May 2018 09:42:22 -0700 Message-Id: <20180521164222.149896-1-briannorris@chromium.org> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog Sender: linux-rtc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org __rtc_read_time() can fail (e.g., if the RTC uses an unreliable medium). When it does, we don't report the error, but instead calculate a 1-second alarm based on the potentially-garbage 'tm' (in practice, __rtc_read_time() zeroes out the time first, so it's likely to still be all 0). Let's propagate the error instead. Signed-off-by: Brian Norris Reported-by: Jeffy Chen Reported-by: Brian Norris --- drivers/rtc/interface.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 7cbdc9228dd5..a4bdd8b5fe2e 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -555,7 +555,9 @@ int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled) struct rtc_time tm; ktime_t now, onesec; - __rtc_read_time(rtc, &tm); + err = __rtc_read_time(rtc, &tm); + if (err) + goto out; onesec = ktime_set(1, 0); now = rtc_tm_to_ktime(tm); rtc->uie_rtctimer.node.expires = ktime_add(now, onesec);