25-akpm/arch/ia64/kernel/time.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff -puN arch/ia64/kernel/time.c~ia64-do_settimeofday-update arch/ia64/kernel/time.c --- 25/arch/ia64/kernel/time.c~ia64-do_settimeofday-update Wed Jun 11 15:02:51 2003 +++ 25-akpm/arch/ia64/kernel/time.c Wed Jun 11 15:05:12 2003 @@ -98,11 +98,14 @@ set_normalized_timespec (struct timespec ts->tv_nsec = nsec; } -void -do_settimeofday (struct timeval *tv) +int +do_settimeofday (struct timespec *tv) { time_t wtm_sec, sec = tv->tv_sec; - long wtm_nsec, nsec = tv->tv_usec * 1000; + long wtm_nsec, nsec = tv->tv_nsec; + + if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) + return -EINVAL; write_seqlock_irq(&xtime_lock); { @@ -127,6 +130,7 @@ do_settimeofday (struct timeval *tv) } write_sequnlock_irq(&xtime_lock); clock_was_set(); + return 0; } void @@ -134,6 +138,9 @@ do_gettimeofday (struct timeval *tv) { unsigned long seq, nsec, usec, sec, old, offset; + if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) + return -EINVAL; + while (1) { seq = read_seqbegin(&xtime_lock); { _