Re: [RFC][PATCH] Use proper casting with signed timespec.tv_nsec values

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



john stultz a écrit :
All,
	I recently ran into a bug with an older kernel where xtime's tv_nsec
field had accumulated more then 2 seconds worth of time. The timespec's
tv_nsec is a signed long, however gettimeofday() treats it as an
unsigned long. Thus when the failure occured, very strange and difficult
to debug time problems occurred.

The main cause of the problem I was seeing is already fixed in mainline,
however just to be safe, I figured the following patch would be wise.

I only audited i386 and x86_64, however other arches probably could have
similar signed problems as well.

Please let me know if you have any further comments or feedback.

What happens on i386 when/if more than 4 seconds accumulate ?
That should happens too.
Maybe the real fix is elsewhere ?


thanks
-john

linux-2.6.13_signed-tv_nsec_A0.patch
====================================
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -824,7 +824,7 @@ static void update_wall_time(unsigned lo
 	do {
 		ticks--;
 		update_wall_time_one_tick();
-		if (xtime.tv_nsec >= 1000000000) {
+		if ((unsigned long)xtime.tv_nsec >= 1000000000) {
 			xtime.tv_nsec -= 1000000000;
 			xtime.tv_sec++;
 			second_overflow();


maybe here a :

while ((unsigned long)xtime.tv_nsec >= 1000000000) {
	xtime.tv_nsec -= 1000000000;
	xtime.tv_sec++;
	second_overflow();
	...
	}


Eric
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux