c08b8a4910
alarm() calls the kernel with an unsigend int timeout in seconds. The value is stored in the tv_sec field of a struct timeval to setup the itimer. The tv_sec field of struct timeval is of type long, which causes the tv_sec value to be negative on 32 bit machines if seconds > INT_MAX. Before the hrtimer merge (pre 2.6.16) such a negative value was converted to the maximum jiffies timeout by the timeval_to_jiffies conversion. It's not clear whether this was intended or just happened to be done by the timeval_to_jiffies code. hrtimers expect a timeval in canonical form and treat a negative timeout as already expired. This breaks the legitimate usage of alarm() with a timeout value > INT_MAX seconds. For 32 bit machines it is therefor necessary to limit the internal seconds value to avoid API breakage. Instead of doing this in all implementations of sys_alarm the duplicated sys_alarm code is moved into a common function in itimer.c Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org> |
||
---|---|---|
.. | ||
fpu32.c | ||
ia32_aout.c | ||
ia32_binfmt.c | ||
ia32_signal.c | ||
ia32entry.S | ||
ipc32.c | ||
Makefile | ||
mmap32.c | ||
ptrace32.c | ||
sys_ia32.c | ||
syscall32_syscall.S | ||
syscall32.c | ||
tls32.c | ||
vsyscall-sigreturn.S | ||
vsyscall-syscall.S | ||
vsyscall-sysenter.S | ||
vsyscall.lds |