• K
    sched/nohz: Fix overflow error in scheduler_tick_max_deferment() · 8fe8ff09
    Kevin Hilman 提交于
    While calculating the scheduler tick max deferment, the delta is
    converted from microseconds to nanoseconds through a multiplication
    against NSEC_PER_USEC.
    
    But this microseconds operand is an unsigned int, thus the result may
    likely overflow. The result is cast to u64 but only once the operation
    is completed, which is too late to avoid overflown result.
    
    This is currently not a problem because the scheduler tick max deferment
    is 1 second. But this may become an issue as we plan to make this
    value tunable.
    
    So lets fix this by casting the usecs value to u64 before multiplying by
    NSECS_PER_USEC.
    
    Also to prevent from this kind of mistake to happen again, move this
    ad-hoc jiffies -> nsecs conversion to a new helper.
    Signed-off-by: NKevin Hilman <khilman@linaro.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Alex Shi <alex.shi@linaro.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Kevin Hilman <khilman@linaro.org>
    Link: http://lkml.kernel.org/r/1387315388-31676-2-git-send-email-khilman@linaro.org
    [move ad-hoc conversion to jiffies_to_nsecs helper]
    Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
    8fe8ff09
jiffies.h 11.6 KB