Algorithm of calculation of hwclock adjustment is vulnerable to miscalculations. These miscalculations may lead to clock drifting by many years even after fixing CMOS hwclock failure. Following two patches are attempts to solve the most visible parts of the problem: - Calculation of excessive drift values in /etc/adjtime - Applying of excessive drift that causes many years clock failure. - It also prevents hangs before 4a44a54b. There are further poor places in the code that are above the scope of this patch set: - Algorithm for detecting of invalid hwclock is very poor (valid_p fails only if hwclock output fails to pass mktime()). - There is no or failing discrimination between fine time adjustment and clock set. - In particular, proposed patch does not cover miscalculation while changing clock due to DST change, and more than 2 days passed since last adjustment. This could be covered by lowering of MAX_DRIFT, but heuristics for discrimination between adjustment and clock setting would be much better. - Most of failures fixed by these patches were hidden by a poor calculation of time passed since last adjustment: if ((hclocktime - adjtime_p->last_calib_time) < 23 * 60 * 60) (As there is no abs(), all times in past were considered as "less than one day ago".) -- Best Regards / S pozdravem, Stanislav Brabec software developer --------------------------------------------------------------------- SUSE LINUX, s. r. o. e-mail: sbrabec@xxxxxxx Lihovarská 1060/12 tel: +49 911 7405384547 190 00 Praha 9 fax: +420 284 084 001 Czech Republic http://www.suse.cz/ PGP: 830B 40D5 9E05 35D8 5E27 6FA3 717C 209F A04F CD76 -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html