]> Pileus Git - ~andy/linux/blobdiff - kernel/time/timekeeping.c
time: Avoid potential shift overflow with large shift values
[~andy/linux] / kernel / time / timekeeping.c
index 1dbf80ec7696467c2260296fec31262e2a3c50d7..a5a9389c4c3090221d1b31bb89512cba5b36af0c 100644 (file)
@@ -1184,9 +1184,9 @@ static void update_wall_time(void)
        * the vsyscall implementations are converted to use xtime_nsec
        * (shifted nanoseconds), this can be killed.
        */
-       remainder = tk->xtime_nsec & ((1 << tk->shift) - 1);
+       remainder = tk->xtime_nsec & ((1ULL << tk->shift) - 1);
        tk->xtime_nsec -= remainder;
-       tk->xtime_nsec += 1 << tk->shift;
+       tk->xtime_nsec += 1ULL << tk->shift;
        tk->ntp_error += remainder << tk->ntp_error_shift;
 
        /*