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 <cmetc...@mellanox.com> --- 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