パスワードを忘れた? アカウント作成
31886 story

「ひかり電話」のVoIPアダプタに249日間の連続稼働で発着信不能になる不具合 45

ストーリー by hylom

KAMUI 曰く

NTT東日本および NTT西日本の「ひかり電話」で、「VoIPアダプタを電源投入後約8ヶ月(249日)間連続して利用すると、ひかり電話の発着信ができなくなる」という、バグが発見された(Nikkei NetNTT東日本のニュースリリース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との大小比較を行う実装方法があります。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by motamota (30138) on 2008年08月05日 19時06分 (#1397396)
    一般家庭における年間平均停電時間 [wikipedia.org]
    アメリカ 73分、イギリス 63分、フランス 57分、日本 9分

    ほかの国なら顕在化しない問題だったりするのかな。
  • by apt (28270) on 2008年08月05日 8時20分 (#1396907) 日記
    249日ということは、10msおきにカウントするような、signedで32bitのカウンタが有って、
    それがオーバーフローするときの処理に何かバグが有った、という感じでしょうか。
    (249*24*60*60*100 = 2151360000 = 0x803b2600)

    • by Masw. (17831) on 2008年08月05日 20時54分 (#1397482)
      まぐまぐ!が過去に配信したメールマガジン [mag2.com]によると、@5msで248日になるそうです。あとがきより引用します。

      また、タイマの値も43億までで、10ミリ秒ごとに1つずつ値を
      増加させると497日と少しで43億となります。
      5ミリ秒ごとだと248日と少しです。
      WindowsやLinuxでは497日問題や248日問題というものがあり
      ます。
      これは32ビットOSの問題なのでネットワーク機器でも起こりえます。
      こういうところからも、OSは定期的にリブートしておいたほうが
      無難、という結論が得られます。
      親コメント
    • by Anonymous Coward
      既出モデがつくべき。
      • by Anonymous Coward

        既出モデがつくべき。
        もともと、KAMUI氏の日記の時点ではオーバーフロー云々は書いてなかったんです。
        # 言い訳だけなのでAC by apt
  • 長電話はするな (スコア:4, おもしろおかしい)

    by virtual (15806) on 2008年08月05日 18時58分 (#1397388)
    ってことですね。

    #多分違うだろうなー
    • Re: (スコア:0, すばらしい洞察)

      by Anonymous Coward
      つけっ放しにするなってことでしょう。
      節電を促すための機能だということにすればよかったのに。
  • by Anonymous Coward on 2008年08月05日 22時16分 (#1397555)
    一般人:
    でんわつかえないどうしよー!受話器ガチャガチャ3回リトライ
    携帯からサポートへ連絡「急に一切電話がかからなくなって、」

    逸般人:
    あれーおかしいなー、がしょがしょ。熱は普通、プチッ(プラグを抜く)うーん
    サクッ(プラグ刺す)あ、つかえたよしよし。
    • by Anonymous Coward

      インターネット接続で同種の事案が発生したら。

      一般人:「あれーどこのサイトもつながんないよー!」さっさと電話でサポートに。

      逸般人:ONUもルーターもランプついてる。ipconfig…apipaにはなってないな。ルーターにpingは…通るな。ルーターにログインしてWANステータス…0.0.0.0あーこりゃだめだ。んじゃ地域IP網は…通じてるぞ、フレッツのサーバーに何かないかな…げ、もろ障害発生中じゃん。待つしかないか。けど誰がこんなとこ見るんだろう。

      ついこの間の実話。元欄干としてはごく自然な行動だと思うんだけど、逸般人だよねぇ。彼女からのヘルプコールに急行してさくっと家電修理とかだとかっこいいけど、ネットのトラブルシュートはオタかっこよくてやや微妙な気がするし、こうやって失敗すると自分のせいではなくても何だか情けないな。

      • 「調子が悪かったらとりあえず電源を入れ直す」なんてのは、一般人の方が逸般人よりありがちじゃないですかね。
        問題は「いきなり電源を切っちゃヤバイもの」でも平気でコンセントから引っこ抜いちゃいすることで…

        1週間ほど前、自宅の無線LANが不調になって、結局アクセスポイントの再起動で復旧したということがありました。
        でもって数日前、私が在宅じゃない時に、妻のノートPCでインターネットが出来なくなったのですが、上記トラブル対応を上辺だけ真似して、「アクセスポイントの他にルーターなどネットワーク機器が繋がっている大元の電源プラグ」を何度か「引っこ抜いて挿す」→「直ったかどうか試す」なんてことをやられてしまいました。

        自宅サーバでWWW/メールとかも受けてるので、ネットワーク接続を常時監視しているのですが、その頃、私は職場にいて、ネットワークが切れたのを知りあせりました。
        フレッツ光でプロバイダは2つ併用していますがどちらも不通なのでプロバイダは無実と推定。NTTの工事・故障情報にもなにもなし…
        って途方に暮れかけたところでネットワークが復旧。帰宅してから顛末を聞いて脱力です。

        #「インターネット出来ない」のトラブルはPC側が原因で、無線LAN用PCカードのドライバを再インストールしたら直りました。
        親コメント
  • by Deasuke (34806) on 2008年08月05日 20時11分 (#1397449) 日記
    > なお、値x、yの大小比較をオーバフローを考慮して比較するには、x、yが符号ありintか符号なしintのどちらかの場合、((int)(x-y))と0との大小比較を行う実装方法があります。
    「オーバフローを考慮して比較するには」という言い方で、万能薬と勘違いしてコピー&ペーストする人が出ないために一言。
    この方法が有効なのは当然ですが「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, でぃーすけ
    • by Anonymous Coward
      バカが見つかったので報告しておく。

      > x、yが符号ありintか符号なしintのどちらかの場合、((int)(x-y))と0との大小比較を行う実装方法があります。

      と書いてあるのに

      > この方法が有効なのは当然ですが「x, yが(unsigned) intの範囲外かもしれないが、x-yがintの範囲内であることが保証される場合」です。

      という結論に達するのはよっぽど自分に自信があるんだな。

      タレコミで触れられていない実装方法の制限はお前が言ったようなことではなく、
      0x80000000以上の変化が存在するときは正常に比較できないことだ。
      頼むから万能薬と勘違いしてコピー&ペーストする人を増やすような事はしないでくれ。
      • 元の表現の「当然ですが」は後側に掛っています。ここを勘違いしているなら読みなおしてくれ。で、

        > 結論に達するのはよっぽど自分に自信があるんだな。
        そうだよ。「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, でぃーすけ
        親コメント
        • 最後の部分が意味不明なので修正。
          s/トータルの変化が0x80000000以上の変化が存在しない/トータルの変化が0x80000000以上でない/

          --
          Best regards, でぃーすけ
          親コメント
        • by Anonymous Coward
          (#1397772) じゃないけど

          iny x = 0;
          int y = -0x7fffffff;
          ++x;
          の場合は0x80000000以上の変化が存在しないが(x-yのMathematical Valueは0x80000000でintの範囲内でないから) x - y > 0 で正常に比較できない。

          ここの部分が意味良く分からない。
          上の例だと x と y は 0x80000000 離れてるよね。

          「変化」とかゆーから、意味不明なのか?
          SEQ_*() の実装は x と y がどれくらい離れているかによって、前後を判定するってのが基本なので「トータルの差が 0x80000000 以上あると正常に判断できない」なら納得できるのだが。

          そもそもとして C では ((int)0x80000000) >= 0 は偽に

  • 全部Nがつくだろ (スコア:2, おもしろおかしい)

    by Futaro (2025) on 2008年08月05日 19時39分 (#1397417) ホームページ 日記
    「ほら、全部Nが付いてるよな。どこのメーカーかわかるだろ?」
    「あ!、ナショナルか!」
    「おまえ、この業界の人間じゃないな。。。しかも古いし。」
    • Re:全部Nがつくだろ (スコア:2, おもしろおかしい)

      by Anonymous Coward on 2008年08月05日 20時20分 (#1397460)
      「ほら、全部Nが付いてるよな。」
      「あ!、NTT東日本とNTT西日本か。」
      親コメント
    • by Anonymous Coward
      VoIPアダプタを使っている方へ大切なお知らせとお願いです。トカ? [nicovideo.jp]

      #動画は余計だ
    • by Anonymous Coward
      那州雪絵の事か?

      ほら、頭にNの字が・・・(w
  • by Anonymous Coward on 2008年08月05日 19時50分 (#1397425)
    この問題でひかり電話が使えなくなりました。
    電話が掛けられなくて気づいたんですけど、通話ログは正常時しか残ってませんでした。
    うちは月2・3回しか家電話を使わないので、

    ・いつからVoIP機能が使えなくなったのか
    ・その間電話が掛かって来たのか分かりません

    いっそルータ機能も止まればネットが使えなくて直ぐ気づいたのですが・・・
  • 素朴な疑問 (スコア:1, 興味深い)

    by Anonymous Coward on 2008年08月05日 20時57分 (#1397484)
    なんで(積算でもない)通電時間を管理してるん?
    • by Anonymous Coward
      網側と裏で自動通信してのファームウェアの更新有無(含む更新そのもの)チェックや、
      網側からの機器(VOIPアダプタ)に対してのパラメータ設定/調整の取り込みチェックなどの
      トリガー元として使ってるんじゃないですかね。
    • by Anonymous Coward
      つhttp://www.google.co.jp/search?hl=ja&q=watchdog+timer&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
      • Re:素朴な疑問 (スコア:1, 参考になる)

        by Anonymous Coward on 2008年08月05日 23時54分 (#1397632)
        ウォッチドッグの基本は
        「正常に動作しているなら、カウントダウン(アップでもいいけど)が進まないようにする」
        「従って、異常になったら進む(場合もあり、それが検出対象)。一定値まで行ったら異常検出と見なす」
        なので、今回の件とは関係無い。

        249日も余裕を見たウォッチドッグだとしたら存在自体がギャグ。
        親コメント
        • by Anonymous Coward
          - バグでカウンターをリセットできなかった
          - さらにバグで(期待した)再起動ができなかった
          - 想定外のオーバーフローであぼ〜ん
          なんてのを想像したんですが、違うのか。残念。
          • by Anonymous Coward
            ティックカウンタとかリアルタイムクロックとか、その辺りを調べるとよろし。
            あとワンショットタイマとか。
  • by Anonymous Coward on 2008年08月05日 21時18分 (#1397504)
    局側からリモートでリブートすればいいのに何故出来ないんだ?
    • by Anonymous Coward
      通話切れたら困るから。
      ユーザーが何時に使うか解らないのにそうするわけにも行くまい。

      # AutoUpdateという手段もなくはないだろうが。
  • 装置三つ(モデム、ルータ、VoIP)の電源を入れ直したら、いきなりネットがつながらなくなってあせりました。
    もう一度、モデムの電源を切って回復。電源切った時に壊れるってのも良くあるからな。どきどき...
  • by Anonymous Coward on 2008年08月05日 19時04分 (#1397393)
    月に、2~3回CTUを含め電源を落としてたから、無問題!
    • by Anonymous Coward
      ヘンなところに、ヘンな事を書いたりしてるんでしょ!
  • by Anonymous Coward on 2008年08月05日 19時44分 (#1397420)
    過去にそんな問題ありましたね。(98の頃?)
    あの時は「そんなに長時間rebootせずに使えるほど安定してないから問題なし」という意見が多かったような。
  • by Anonymous Coward on 2008年08月05日 20時15分 (#1397453)
    NECアクセステクニカ製ですな。
  • 249日経つと、すべてがFになってしまうのですね。

    #スカイクロラを読んで以降、本棚に森博嗣の小説が大増加中。
  • by Anonymous Coward on 2009年02月17日 1時20分 (#1515018)
    NEC、事業者向けIP電話対応機器で不具合。対象は約184万台
    http://bb.watch.impress.co.jp/cda/news/24897.html

    >判明した不具合は、電源投入後から、約6年9カ月間(2485日)連続して利用すると、電話の発着信ができなくなるもの。
    またint32のオーバーフローですね。わかります。
typodupeerror

UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア

読み込み中...