Index: sys/i386/isa/clock.c =================================================================== RCS file: /home/ncvs/src/sys/i386/isa/clock.c,v retrieving revision 1.237 diff -u -r1.237 clock.c --- sys/i386/isa/clock.c 15 Jun 2007 22:58:13 -0000 1.237 +++ sys/i386/isa/clock.c 10 Jul 2007 09:06:23 -0000 @@ -704,7 +704,12 @@ #else ct.year += 2000; #endif - clock_ct_to_ts(&ct, &ts); + /* Should we set dow = -1 because some clocks don't set it correctly? */ + if (clock_ct_to_ts(&ct, &ts)) { + printf("Invalid time in real time clock.\n"); + printf("Check and reset the date immediately!\n"); + return; + } ts.tv_sec += utc_offset(); tc_setclock(&ts); } Index: sys/ia64/ia64/clock.c =================================================================== RCS file: /home/ncvs/src/sys/ia64/ia64/clock.c,v retrieving revision 1.30 diff -u -r1.30 clock.c --- sys/ia64/ia64/clock.c 19 Oct 2006 00:53:35 -0000 1.30 +++ sys/ia64/ia64/clock.c 3 Apr 2007 09:06:42 -0000 @@ -142,7 +142,10 @@ ct.mon = tm.tm_mon; ct.year = tm.tm_year; ct.dow = -1; - clock_ct_to_ts(&ct, &ts); + if (clock_ct_to_ts(&ct, &ts)) { + printf("Invalid time in real time clock.\n"); + printf("Check and reset the date immediately!\n"); + } ts.tv_sec += utc_offset(); /* Index: sys/kern/subr_clock.c =================================================================== RCS file: /home/ncvs/src/sys/kern/subr_clock.c,v retrieving revision 1.11 diff -u -r1.11 subr_clock.c --- sys/kern/subr_clock.c 2 Oct 2006 18:23:37 -0000 1.11 +++ sys/kern/subr_clock.c 3 Apr 2007 09:00:39 -0000 @@ -151,7 +151,7 @@ days += days_in_month(year, i); days += (ct->day - 1); - /* Another sanity check. */ + /* XXX Dow sanity check. Dow is not used, so should we check it? */ if (ct->dow != -1 && ct->dow != day_of_week(days)) return (EINVAL); Index: sys/pc98/cbus/clock.c =================================================================== RCS file: /home/ncvs/src/sys/pc98/cbus/clock.c,v retrieving revision 1.160 diff -u -r1.160 clock.c --- sys/pc98/cbus/clock.c 4 Jun 2007 18:25:08 -0000 1.160 +++ sys/pc98/cbus/clock.c 10 Jul 2007 09:06:57 -0000 @@ -638,7 +638,12 @@ ct.year = bcd2bin(rtc_inb() & 0xff) + 1900; /* year */ if (ct.year < 1995) ct.year += 100; - clock_ct_to_ts(&ct, &ts); + /* Should we set dow = -1 because some clocks don't set it correctly? */ + if (clock_ct_to_ts(&ct, &ts)) { + printf("Invalid time in real time clock.\n"); + printf("Check and reset the date immediately!\n"); + return; + } ts.tv_sec += utc_offset(); tc_setclock(&ts); } Index: sys/sparc64/sparc64/eeprom.c =================================================================== RCS file: /home/ncvs/src/sys/sparc64/sparc64/eeprom.c,v retrieving revision 1.12 diff -u -r1.12 eeprom.c --- sys/sparc64/sparc64/eeprom.c 16 Jun 2007 23:07:53 -0000 1.12 +++ sys/sparc64/sparc64/eeprom.c 27 Jun 2007 08:47:28 -0000 @@ -170,9 +170,11 @@ } if (bootverbose) { - mk48txx_gettime(dev, &ts); - device_printf(dev, "current time: %ld.%09ld\n", (long)ts.tv_sec, - ts.tv_nsec); + if (mk48txx_gettime(dev, &ts) != 0) + device_printf(dev, "invalid time"); + else + device_printf(dev, "current time: %ld.%09ld\n", + (long)ts.tv_sec, ts.tv_nsec); } return (0); Index: sys/sparc64/sparc64/rtc.c =================================================================== RCS file: /home/ncvs/src/sys/sparc64/sparc64/rtc.c,v retrieving revision 1.6 diff -u -r1.6 rtc.c --- sys/sparc64/sparc64/rtc.c 16 Jun 2007 23:17:23 -0000 1.6 +++ sys/sparc64/sparc64/rtc.c 27 Jun 2007 08:53:16 -0000 @@ -208,9 +208,11 @@ } if (bootverbose) { - mc146818_gettime(dev, &ts); - device_printf(dev, "current time: %ld.%09ld\n", (long)ts.tv_sec, - ts.tv_nsec); + if (mc146818_gettime(dev, &ts) != 0) + device_printf(dev, "invalid time"); + else + device_printf(dev, "current time: %ld.%09ld\n", + (long)ts.tv_sec, ts.tv_nsec); } return (0);