http://kenichiokuyama.blogspot.com/2011/12/schedclock-overflow-after-2085-days-in.html
http://kernel.opensuse.org/cgit/kernel-source/commit/?id=413af9e6f17a1a1519cae0bfd1c1fe4409bb42a3
http://www.novell.com/support/viewContent.do?externalId=7009834&sliceId=1
https://access.redhat.com/kb/docs/DOC-69254
影響範囲
Linux Kernel 2.6.28 で導入されたパッチにバグがあり、3.1.5 で修正された。この間にリリースされた distribution は多分全部影響を受ける。なお、具体的には
2.6系列: 2.6.32.50でfix
3.0系列: 3.0.13でfix
3.1系列: 3.1.5でfix
らしい。
https://access.redhat.com/knowledge/solutions/68466
Red Hat Enterprise Linux 6 Kernel version earlier than kernel-2.6.32-220.4.2.el6 (中略) Red Hat Enterprise Linux 5 Red Hat Enterprise Linux 5 for x86 Kernel version as follows -- Red Hat Enterprise Linux 5.7 Earlier than kernel-2.6.18-274.7.1.el5 -- Red Hat Enterprise Linux 5.6 Earlier than kernel-2.6.18-238.28.1.el5 -- Red Hat Enterprise Linux 5.3 Earlier than kernel-2.6.18-128.36.1.el5
そうだ! Scale Factor を分数で表そう!!
SC/1024 で表現して、
SCを整数にしておけば、
SCを掛け算した後、
右に10bit シフトすれば済むよっ!!!…この段階で何か嫌な予感がしなかったんだろうか、こいつらは…
(中略)
かくして、cycles_2_ns() は、208.5日経つと、桁あふれを起こして 0 に近い値を出力する。sched_clock() はこの値を利用しているため、ここもぶち飛ぶ。スケジューラーはここの値に強く依存しているので、突如として 54bit の数字が 0 になると、カーネルのあちこちがぶっ飛んでしまい、reboot に至る。
素敵〜