Re: How is Code in do_sys_settimeofday() safe in case of SMP and Nest Kernel Path?

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

 



On Sat, 30 Sep 2006, Nick Piggin wrote

You should write a patch and send it to Mister Morton.

--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com



This is a patch for your review.

--- kernel/time.c.orig	2006-09-30 23:21:29.000000000 +0800
+++ kernel/time.c	2006-09-30 23:38:18.000000000 +0800
@@ -107,7 +107,16 @@ asmlinkage long sys_gettimeofday(struct
			return -EFAULT;
	}
	if (unlikely(tz != NULL)) {
-		if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
+		struct timezone ktz;
+		unsigned long seq;
+
+		do {
+                	seq = read_seqbegin(&xtime_lock);
+			ktz.tz_minuteswest = sys_tz.tz_minuteswest;
+			ktz.tz_dsttime = sys_tz.tz_dsttime;
+        	} while (unlikely(read_seqretry(&xtime_lock, seq)));
+
+		if (copy_to_user(tz, &ktz, sizeof(ktz)))
			return -EFAULT;
	}
	return 0;
@@ -164,12 +173,16 @@ int do_sys_settimeofday(struct timespec

	if (tz) {
		/* SMP safe, global irq locking makes it work. */
-		sys_tz = *tz;
-		if (firsttime) {
-			firsttime = 0;
-			if (!tv)
-				warp_clock();
+		write_seqlock_irq(&xtime_lock);
+		{
+			sys_tz = *tz;
+			if (firsttime) {
+				firsttime = 0;
+				if (!tv)
+					warp_clock();
+			}
		}
+		write_sequnlock_irq(&xtime_lock);
	}
	if (tv)
	{
-
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]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux