• George Anzinger's avatar
    [PATCH] posix timers: fix normalization problem · 78fa74a2
    George Anzinger authored
    (We found this (after a customer complained) and it is in the kernel.org
    kernel.  Seems that for CLOCK_MONOTONIC absolute timers and clock_nanosleep
    calls both the request time and wall_to_monotonic are subtracted prior to
    the normalize resulting in an overflow in the existing normalize test.
    This causes the result to be shifted ~4 seconds ahead instead of ~2 seconds
    back in time.)
    
    The normalize code in posix-timers.c fails when the tv_nsec member is ~1.2
    seconds negative.  This can happen on absolute timers (and
    clock_nanosleeps) requested on CLOCK_MONOTONIC (both the request time and
    wall_to_monotonic are subtracted resulting in the possibility of a number
    close to -2 seconds.)
    
    This fix uses the set_normalized_timespec() (which does not have an
    overflow problem) to fix the problem and as a side effect makes the code
    cleaner.
    Signed-off-by: default avatarGeorge Anzinger <george@mvista.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    78fa74a2
posix-timers.c 44.1 KB