Messages in this thread Patch in this message | | | Date | Sun, 1 Oct 2006 00:09:24 +0800 | From | "Dong Feng" <> | Subject | Re: How is Code in do_sys_settimeofday() safe in case of SMP and Nest Kernel Path? |
| |
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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |