「ひかり電話」のVoIPアダプタに249日間の連続稼働で発着信不能になる不具合 45
ストーリー by hylom
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, 参考になる)
Re: (スコア:0)
Re: (スコア:0)
# 言い訳だけなのでAC by apt
長電話はするな (スコア:4, おもしろおかしい)
#多分違うだろうなー
Re: (スコア:0, すばらしい洞察)
節電を促すための機能だということにすればよかったのに。
一般人と逸般人の対応(-1,しょーもない話) (スコア:4, おもしろおかしい)
でんわつかえないどうしよー!受話器ガチャガチャ3回リトライ
携帯からサポートへ連絡「急に一切電話がかからなくなって、」
逸般人:
あれーおかしいなー、がしょがしょ。熱は普通、プチッ(プラグを抜く)うーん
サクッ(プラグ刺す)あ、つかえたよしよし。
Re: (スコア:0)
インターネット接続で同種の事案が発生したら。
一般人:「あれーどこのサイトもつながんないよー!」さっさと電話でサポートに。
逸般人:ONUもルーターもランプついてる。ipconfig…apipaにはなってないな。ルーターにpingは…通るな。ルーターにログインしてWANステータス…0.0.0.0あーこりゃだめだ。んじゃ地域IP網は…通じてるぞ、フレッツのサーバーに何かないかな…げ、もろ障害発生中じゃん。待つしかないか。けど誰がこんなとこ見るんだろう。
ついこの間の実話。元欄干としてはごく自然な行動だと思うんだけど、逸般人だよねぇ。彼女からのヘルプコールに急行してさくっと家電修理とかだとかっこいいけど、ネットのトラブルシュートはオタかっこよくてやや微妙な気がするし、こうやって失敗すると自分のせいではなくても何だか情けないな。
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: (スコア:0)
> x、yが符号ありintか符号なしintのどちらかの場合、((int)(x-y))と0との大小比較を行う実装方法があります。
と書いてあるのに
> この方法が有効なのは当然ですが「x, yが(unsigned) intの範囲外かもしれないが、x-yがintの範囲内であることが保証される場合」です。
という結論に達するのはよっぽど自分に自信があるんだな。
タレコミで触れられていない実装方法の制限はお前が言ったようなことではなく、
0x80000000以上の変化が存在するときは正常に比較できないことだ。
頼むから万能薬と勘違いしてコピー&ペーストする人を増やすような事はしないでくれ。
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, でぃーすけ
Re: (スコア:0)
ここの部分が意味良く分からない。
上の例だと x と y は 0x80000000 離れてるよね。
「変化」とかゆーから、意味不明なのか?
SEQ_*() の実装は x と y がどれくらい離れているかによって、前後を判定するってのが基本なので「トータルの差が 0x80000000 以上あると正常に判断できない」なら納得できるのだが。
そもそもとして C では ((int)0x80000000) >= 0 は偽に
全部Nがつくだろ (スコア:2, おもしろおかしい)
「あ!、ナショナルか!」
「おまえ、この業界の人間じゃないな。。。しかも古いし。」
Re:全部Nがつくだろ (スコア:2, おもしろおかしい)
「あ!、NTT東日本とNTT西日本か。」
Re: (スコア:0)
#動画は余計だ
Re: (スコア:0)
ほら、頭にNの字が・・・(w
ネットと携帯で生活してると気づかない (スコア:1, 興味深い)
電話が掛けられなくて気づいたんですけど、通話ログは正常時しか残ってませんでした。
うちは月2・3回しか家電話を使わないので、
・いつからVoIP機能が使えなくなったのか
・その間電話が掛かって来たのか分かりません
いっそルータ機能も止まればネットが使えなくて直ぐ気づいたのですが・・・
Re:ネットと携帯で生活してると気づかない (スコア:1)
ある日帰ってくるとPPPoEセッションが切れたまま、再接続できないし...
しかし、メーカーの違う光ルーター両方で同じ問題を出すとは...
同じOSでも使ってたんでしょうかね?
Re:ネットと携帯で生活してると気づかない (スコア:1)
Re:ネットと携帯で生活してると気づかない (スコア:1)
メーカーは一緒ですよ。
どれも型番の最後にNEってついてるでしょ。
素朴な疑問 (スコア:1, 興味深い)
Re: (スコア:0)
網側からの機器(VOIPアダプタ)に対してのパラメータ設定/調整の取り込みチェックなどの
トリガー元として使ってるんじゃないですかね。
Re: (スコア:0)
Re:素朴な疑問 (スコア:1, 参考になる)
「正常に動作しているなら、カウントダウン(アップでもいいけど)が進まないようにする」
「従って、異常になったら進む(場合もあり、それが検出対象)。一定値まで行ったら異常検出と見なす」
なので、今回の件とは関係無い。
249日も余裕を見たウォッチドッグだとしたら存在自体がギャグ。
Re: (スコア:0)
- さらにバグで(期待した)再起動ができなかった
- 想定外のオーバーフローであぼ〜ん
なんてのを想像したんですが、違うのか。残念。
Re: (スコア:0)
あとワンショットタイマとか。
リモートでリブート (スコア:1, 興味深い)
Re: (スコア:0)
ユーザーが何時に使うか解らないのにそうするわけにも行くまい。
# AutoUpdateという手段もなくはないだろうが。
そういえば最近電話がかかってこなかった... (スコア:1)
もう一度、モデムの電源を切って回復。電源切った時に壊れるってのも良くあるからな。どきどき...
IPが変わることを期待して (スコア:0)
Re: (スコア:0)
Windowsでも (スコア:0)
あの時は「そんなに長時間rebootせずに使えるほど安定してないから問題なし」という意見が多かったような。
Re:Windowsでも (スコア:2, 参考になる)
Windowsの「49.7日バグ」の真相 [ascii24.com]
Re:Windowsでも (スコア:2, 参考になる)
Re:Windowsでも (スコア:2, 参考になる)
NEといえば (スコア:0)
どっかで見たような…あ、アレか(スコア:-1, ネタバレ) (スコア:0)
#スカイクロラを読んで以降、本棚に森博嗣の小説が大増加中。
バグ再来 (スコア:0)
http://bb.watch.impress.co.jp/cda/news/24897.html
>判明した不具合は、電源投入後から、約6年9カ月間(2485日)連続して利用すると、電話の発着信ができなくなるもの。
またint32のオーバーフローですね。わかります。
Re:オフトピ (スコア:2, おもしろおかしい)
むしろ早い方だ。
Re:オフトピ (スコア:1)
2.自社じゃなく顧客側のシステム担当が上記のためとばっちりで忙しい。 とか
3.アレが迫ってるし駆け込みの準備でそれどころじゃない。 とか
Re: (スコア:0)
上がってくるまで時間が掛かったのかと。