time: Prevent 32 bit overflow with set_normalized_timespec()
authorThomas Gleixner <tglx@linutronix.de>
Mon, 14 Sep 2009 21:37:40 +0000 (23:37 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 15 Sep 2009 08:17:30 +0000 (10:17 +0200)
commit12e09337fe238981cb0c87543306e23775d1a143
tree4c5052a801e6868ce2c701af10bf55f5ec5a4929
parent54a6bc0b071c50150bc6d1da16c2cd9a963e288c
time: Prevent 32 bit overflow with set_normalized_timespec()

set_normalized_timespec() nsec argument is of type long. The recent
timekeeping changes of ktime_get_ts() feed

ts->tv_nsec + tomono.tv_nsec + nsecs

to set_normalized_timespec(). On 32 bit machines that sum can be
larger than (1 << 31) and therefor result in a negative value which
screws up the result completely.

Make the nsec argument of set_normalized_timespec() s64 to fix the
problem at hand. This also prevents similar problems for future users
of set_normalized_timespec().

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Carsten Emde <carsten.emde@osadl.org>
LKML-Reference: <new-submission>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: John Stultz <johnstul@us.ibm.com>
include/linux/time.h
kernel/time.c