]> git.ipfire.org Git - thirdparty/util-linux.git/commit
hwclock: Prevent excessive drift values
authorStanislav Brabec <sbrabec@suse.cz>
Mon, 5 May 2014 18:49:29 +0000 (20:49 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 6 May 2014 10:49:55 +0000 (12:49 +0200)
commitf196fd1a5f8fff63635fd88b5a0f0bbc96978df2
treed30789725ca1e48f5471ffba7a159a5ec012a504
parent802cb7db7147cc0a79647d2c45833d12b73c7b8a
hwclock: Prevent excessive drift values

Failure of CMOS battery can cause writing of excessive drift
values (up to many years per day).

This causes excessive hwclock adjustment next time, which may lead
to overflow in calculate_adjustment() (and hang before 4a44a54b).

Prevent this situation, check drift for limits and reset drift to zero
instead.

Steps to reproduce:

mv /etc/adjtime /etc/adjtime.backup

rm /etc/adjtime
hwclock --set --date 2001-01-01\ 01:00:00

changing of /etc/adjtime.
mv /etc/adjtime /etc/adjtime.saved
hwclock --set --date 2001-01-02\ 01:00:01
mv /etc/adjtime.saved /etc/adjtime

echo "======= The /etc/adjtime has a \"correct\" look:"
cat /etc/adjtime

hwclock --debug --systohc --utc
echo "======= The /etc/adjtime now has deeply failed drift value:"
cat /etc/adjtime

mv /etc/adjtime /etc/adjtime.saved
hwclock --set --date 2015-01-01\ 01:00:00
mv /etc/adjtime.saved /etc/adjtime

hwclock --debug --adjust
echo "======= And the last /etc/adjtime:"
cat /etc/adjtime

mv /etc/adjtime.backup /etc/adjtime
hwclock --systohc --utc

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
sys-utils/hwclock.c