Systemovy cas preskocil o hodinu

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Úterý Červenec 3 10:11:43 CEST 2012


On Sat, 9 Jun 2012, Petr Baláš wrote:

> Právě se mi taky posunul čas na Debianu. A může za to update balíčku nut.
> [...]
> /lib/udev/hwclock-set
> a ten (pokud v /etc/default/rcS NENÍ UTC=yes) spoustí příkaz
> /sbin/hwclock --systz --localtime --noadjfile
> a ten posune hodiny o 2 hodiny do minulosti

Jedna opozděná poznámka: tenhle příkaz je fakt dost stupidní vynález.

Idea byla asi taková, že místo toho, aby se provedlo tradiční --hctosys,
tak se systémové hodiny někdy při startu nastaví podle RTC s předpokladem,
že RTC je v UTC, a později se spustí tento příkaz, který systémové hodiny
"opraví" (bez nutnosti přístupu k /dev/rtc?).

Ovšem nikde se nekontroluje, zda "oprava" již byla proveda. A tudíž deset
spuštění toho příkazu posune systémové hodiny desetkrát.

Obzvlášť kuriozní na tom je, že ten samý mechanismus (asi celkem 
zapomenutý) je v jádře a tam ta pojistka proti vícenásobnému posunu 
implementována je (i když je tam možná menší race condition) i 
s poznámkou o tom, jaký zmatek by vyplýval z vícenásobného posunutí hodin.
Ale hwclock je naprogramovaný tak, že sice nastaví v jádře časovou zónu 
(a tím ten jaderný mechanismus jednorázově aktivuje), ale zároveň 
posunutý čas nastaví sám, a tím tu pojistku obejde.

Jiná věc je, že nesmírná stupidita je i to, když je RTC v nějaké lokální
časové zóně, zejména takové, kde funguje letní čas (a to, co s hodinami
dělá nejmenovaný uživatelsky přívětivý OS, je pak už na 8 gramů olova).


-- 
Pavel Kankovsky aka Peak                          / Jeremiah 9:21        \
"For death is come up into our MS Windows(tm)..." \ 21st century edition /



Další informace o konferenci Linux