NTT東日本および NTT西日本の「ひかり電話」で、「VoIPアダプタを電源投入後約8ヶ月(249日)間連続して利用すると、ひかり電話の発着信ができなくなる」という、バグが発見された(Nikkei Net、NTT東日本のニュースリリース、NTT西日本のニュースリリース)。NTT東西では7日にもアップデートを行うことを明らかにしている。
問題があるのは「PR-200NE」「RT-200NE」「RV-230NE」(NTT東日本)と「AD-200NE」(NTT西日本)で、合計約126万台(東日本120万台、西日本6万台)。ファームも複数のバージョンにまたがっており、電源投入後249日(約8ヶ月)連続使用すると発着信が出来なくなるというもの。なお、8ヶ月連続使用する以前にファームのバージョンアップをしたり、電源アダプタの抜き差しを行っていた場合にはそこで日数も一旦リセットされる。
(つづく...)
また、Anonymous Coward曰く、
症状からは、起動時に0からスタートし10msecごとに1つずつアップしていく32ビット符号ありの変数のカウンタが存在し、そのカウンタ変数のオーバフロー時に問題が生じていると推測できます。 Linux、Windowsの497日問題など、このようなオーバーフローバグの事例は多いです。バグになるという認識が浸透していないのでしょうか。
なお、値x、yの大小比較をオーバフローを考慮して比較するには、x、yが符号ありintか符号なしintのどちらかの場合、((int)(x-y))と0との大小比較を行う実装方法があります。

日本の停電事情 (スコア:5, 興味深い)
アメリカ 73分、イギリス 63分、フランス 57分、日本 9分
ほかの国なら顕在化しない問題だったりするのかな。
カウンタのオーバーフロー? (スコア:4, 興味深い)
それがオーバーフローするときの処理に何かバグが有った、という感じでしょうか。
(249*24*60*60*100 = 2151360000 = 0x803b2600)
Re:カウンタのオーバーフロー? (スコア:2, 参考になる)
親コメント
長電話はするな (スコア:4, おもしろおかしい)
#多分違うだろうなー
一般人と逸般人の対応(-1,しょーもない話) (スコア:4, おもしろおかしい)
でんわつかえないどうしよー!受話器ガチャガチャ3回リトライ
携帯からサポートへ連絡「急に一切電話がかからなくなって、」
逸般人:
あれーおかしいなー、がしょがしょ。熱は普通、プチッ(プラグを抜く)うーん
サクッ(プラグ刺す)あ、つかえたよしよし。
Re:一般人と逸般人の対応(-1,しょーもない話) (スコア:2, 興味深い)
問題は「いきなり電源を切っちゃヤバイもの」でも平気でコンセントから引っこ抜いちゃいすることで…
1週間ほど前、自宅の無線LANが不調になって、結局アクセスポイントの再起動で復旧したということがありました。
でもって数日前、私が在宅じゃない時に、妻のノートPCでインターネットが出来なくなったのですが、上記トラブル対応を上辺だけ真似して、「アクセスポイントの他にルーターなどネットワーク機器が繋がっている大元の電源プラグ」を何度か「引っこ抜いて挿す」→「直ったかどうか試す」なんてことをやられてしまいました。
自宅サーバでWWW/メールとかも受けてるので、ネットワーク接続を常時監視しているのですが、その頃、私は職場にいて、ネットワークが切れたのを知りあせりました。
フレッツ光でプロバイダは2つ併用していますがどちらも不通なのでプロバイダは無実と推定。NTTの工事・故障情報にもなにもなし…
って途方に暮れかけたところでネットワークが復旧。帰宅してから顛末を聞いて脱力です。
#「インターネット出来ない」のトラブルはPC側が原因で、無線LAN用PCカードのドライバを再インストールしたら直りました。
親コメント
おせっかいかもしれないが (スコア:3, 参考になる)
「オーバフローを考慮して比較するには」という言い方で、万能薬と勘違いしてコピー&ペーストする人が出ないために一言。
この方法が有効なのは当然ですが「x, yが(unsigned) intの範囲外かもしれないが、x-yがintの範囲内であることが保証される場合」です。
オーバフローの例ではないですが、unsigned intのないJavaでintに入っているx, yをunsigned intだと思って比較するにはx-yはintの範囲には入らないかもしれないので別の方法、例えば
x + Integer.MIN_VALUE < y + Integer.MIN_VALUE
などを用います。
Best regards, でぃーすけ
Re:おせっかいかもしれないが (スコア:1)
> 結論に達するのはよっぽど自分に自信があるんだな。
そうだよ。「x, yが(unsigned) intの範囲外かもしれないが、x-yがintの範囲内であることが保証される場合」というのが正確な条件の表現だよ。
もちろん、「xやyが範囲外かもしれない」という表現からも分かるようにx,yなどはMathematical Valueで考えるよ。
> 0x80000000以上の変化が存在するときは正常に比較できないことだ。
これは間違い。
例えば、(以下多くの処理系が採用しているようにintはsignedで32bitとする)
int x = y = 1
x += 0x90000000;
x -= 0x80000000;
の場合は0x80000000以上の変化が存在するが(x-yのMathematical Valueは0x10000000でintの範囲内だから) x - y > 0 で正常に比較できる。
iny x = 0;
int y = -0x7fffffff;
++x;
の場合は0x80000000以上の変化が存在しないが(x-yのMathematical Valueは0x80000000でintの範囲内でないから) x - y > 0 で正常に比較できない。
すなわち「0x80000000以上の変化が存在するかどうか」はx-y>0で正常に比較できるかどうかと関係ない。
あくまでも比較可能である条件は私の書いたのが正確。
ちなみに君が勘違いした理由かもしれないものの一つを挙げておくと、
「片側の変数が変化しない場合に限り、もう片側の変数のトータルの変化が0x80000000以上の変化が存在しない」は「x-y>0で正常に比較できる」ことの必要条件である(上記の反例の通り、十分条件ではない)。
Best regards, でぃーすけ
親コメント
Re:おせっかいかもしれないが (スコア:1)
s/トータルの変化が0x80000000以上の変化が存在しない/トータルの変化が0x80000000以上でない/
Best regards, でぃーすけ
親コメント
全部Nがつくだろ (スコア:2, おもしろおかしい)
「あ!、ナショナルか!」
「おまえ、この業界の人間じゃないな。。。しかも古いし。」
Re:全部Nがつくだろ (スコア:2, おもしろおかしい)
「あ!、NTT東日本とNTT西日本か。」
親コメント
ネットと携帯で生活してると気づかない (スコア:1, 興味深い)
電話が掛けられなくて気づいたんですけど、通話ログは正常時しか残ってませんでした。
うちは月2・3回しか家電話を使わないので、
・いつからVoIP機能が使えなくなったのか
・その間電話が掛かって来たのか分かりません
いっそルータ機能も止まればネットが使えなくて直ぐ気づいたのですが・・・
Re:ネットと携帯で生活してると気づかない (スコア:1)
ある日帰ってくるとPPPoEセッションが切れたまま、再接続できないし...
しかし、メーカーの違う光ルーター両方で同じ問題を出すとは...
同じOSでも使ってたんでしょうかね?
親コメント
Re:ネットと携帯で生活してると気づかない (スコア:1)
親コメント
Re:ネットと携帯で生活してると気づかない (スコア:1)
メーカーは一緒ですよ。
どれも型番の最後にNEってついてるでしょ。
親コメント
素朴な疑問 (スコア:1, 興味深い)
Re:素朴な疑問 (スコア:1, 参考になる)
「正常に動作しているなら、カウントダウン(アップでもいいけど)が進まないようにする」
「従って、異常になったら進む(場合もあり、それが検出対象)。一定値まで行ったら異常検出と見なす」
なので、今回の件とは関係無い。
249日も余裕を見たウォッチドッグだとしたら存在自体がギャグ。
親コメント
リモートでリブート (スコア:1, 興味深い)
そういえば最近電話がかかってこなかった... (スコア:1)
もう一度、モデムの電源を切って回復。電源切った時に壊れるってのも良くあるからな。どきどき...
Re:Windowsでも (スコア:2, 参考になる)
Windowsの「49.7日バグ」の真相 [ascii24.com]
親コメント
Re:Windowsでも (スコア:2, 参考になる)
親コメント
Re:Windowsでも (スコア:2, 参考になる)
親コメント
Re:オフトピ (スコア:1)
2.自社じゃなく顧客側のシステム担当が上記のためとばっちりで忙しい。 とか
3.アレが迫ってるし駆け込みの準備でそれどころじゃない。 とか
親コメント
Re:オフトピ (スコア:2, おもしろおかしい)
むしろ早い方だ。
親コメント