diff options
| author | George Anzinger <george@mvista.com> | 2005-11-13 19:07:44 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-13 21:14:17 -0500 |
| commit | 3f39894d1b5c253b10fcb8fbbbcf65a330f6cdc7 (patch) | |
| tree | 6d166da37e874f2c0b891d4cf61b5f4b9bf5a71f /kernel | |
| parent | 09e12f9f6bcd9af516d901223cebdbae58b32c9f (diff) | |
[PATCH] timespec: normalize off by one errors
It would appear that the timespec normalize code has an off by one error.
Found in three places. Thanks to Ben for spotting.
Signed-off-by: George Anzinger<george@mvista.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/posix-timers.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index ea55c7a1cd75..5870efb3e200 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c | |||
| @@ -270,7 +270,7 @@ static void tstojiffie(struct timespec *tp, int res, u64 *jiff) | |||
| 270 | long sec = tp->tv_sec; | 270 | long sec = tp->tv_sec; |
| 271 | long nsec = tp->tv_nsec + res - 1; | 271 | long nsec = tp->tv_nsec + res - 1; |
| 272 | 272 | ||
| 273 | if (nsec > NSEC_PER_SEC) { | 273 | if (nsec >= NSEC_PER_SEC) { |
| 274 | sec++; | 274 | sec++; |
| 275 | nsec -= NSEC_PER_SEC; | 275 | nsec -= NSEC_PER_SEC; |
| 276 | } | 276 | } |
| @@ -1209,13 +1209,9 @@ static int do_posix_clock_monotonic_get(clockid_t clock, struct timespec *tp) | |||
| 1209 | 1209 | ||
| 1210 | do_posix_clock_monotonic_gettime_parts(tp, &wall_to_mono); | 1210 | do_posix_clock_monotonic_gettime_parts(tp, &wall_to_mono); |
| 1211 | 1211 | ||
| 1212 | tp->tv_sec += wall_to_mono.tv_sec; | 1212 | set_normalized_timespec(tp, tp->tv_sec + wall_to_mono.tv_sec, |
| 1213 | tp->tv_nsec += wall_to_mono.tv_nsec; | 1213 | tp->tv_nsec + wall_to_mono.tv_nsec); |
| 1214 | 1214 | ||
| 1215 | if ((tp->tv_nsec - NSEC_PER_SEC) > 0) { | ||
| 1216 | tp->tv_nsec -= NSEC_PER_SEC; | ||
| 1217 | tp->tv_sec++; | ||
| 1218 | } | ||
| 1219 | return 0; | 1215 | return 0; |
| 1220 | } | 1216 | } |
| 1221 | 1217 | ||
