Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935947AbcKNTnD (ORCPT ); Mon, 14 Nov 2016 14:43:03 -0500 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:38095 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932218AbcKNTnC (ORCPT ); Mon, 14 Nov 2016 14:43:02 -0500 From: Chris Metcalf To: John Stultz , Thomas Gleixner , Laurent Vivier , David Gibson , "Christopher S . Hall" , linux-kernel@vger.kernel.org Cc: Chris Metcalf Subject: [PATCH] time: Avoid signed overflow in timekeeping_delta_to_ns() Date: Mon, 14 Nov 2016 14:42:49 -0500 Message-Id: <1479152569-16890-1-git-send-email-cmetcalf@mellanox.com> X-Mailer: git-send-email 2.7.2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1078 Lines: 30 This bugfix was originally made in commit 35a4933a8959 ("time: Avoid signed overflow in timekeeping_get_ns()"). When the code was refactored in commit 6bd58f09e1d8 ("time: Add cycles to nanoseconds translation") the signed overflow fix was lost. Re-introduce it. Signed-off-by: Chris Metcalf --- I happened to be looking for an unrelated fix, found this code, realized the tip code didn't match the fixed code, and backtracked to where it had gone away. kernel/time/timekeeping.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 37dec7e3db43..57926bc7b7f3 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -304,8 +304,7 @@ static inline s64 timekeeping_delta_to_ns(struct tk_read_base *tkr, { s64 nsec; - nsec = delta * tkr->mult + tkr->xtime_nsec; - nsec >>= tkr->shift; + nsec = (delta * tkr->mult + tkr->xtime_nsec) >> tkr->shift; /* If arch requires, add in get_arch_timeoffset() */ return nsec + arch_gettimeoffset(); -- 2.7.2