パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

MySQL/MariaDBにバグ、256分の1の確率で間違ったパスワードでも認証されてしまう」記事へのコメント

  • by Anonymous Coward

    実装なのか想像するスレ

    • Re:どういう (スコア:5, 参考になる)

      by denchu (6847) on 2012年06月13日 9時55分 (#2172368)

      昨日twitter上でいろいろと話していました。えーっと…
      1. memcmp は、通常、差異がある場合は先頭バイトの差を返す(-255~255)
      2. ところが SIMD 命令などで memcmp が最適化された場合、char の範囲外(int範囲とか)になってしまう可能性がある。
      3. その戻り値を char にキャストしているため、場合によっては下位 8bit が 0 になって、一致してしまう。
      てなことらしい。たぶん。

      親コメント
      • by minet (45149) on 2012年06月13日 10時28分 (#2172391) 日記

        先頭バイト値の差だとしても、既にchar型の範囲外だね。char型は-128〜127

        というより、関数の戻り値がintなのにcharにキャストしてしまっている時点で、ただのバグだね。
        SSE最適化とかは本質的には関係ないな。

        親コメント
        • by minet (45149) on 2012年06月13日 10時55分 (#2172414) 日記

          自己レス失礼。
          理解した。
          -255〜255だと、元が0でなきゃchar型にキャストしても0にならない範囲内なのね。
          これは確かにうっかりしそうだ。

          それでも縮小キャストしてる時点で終わってますが。

          親コメント
          • by Anonymous Coward

            しかもその理由が「コンパイラが警告を出すから」だったりするし。

            • by Anonymous Coward

              ナローキャストしないと警告を出すなんて!?
              と思ったが、こういうことだな。

              char型を返す関数内でmemcpy関数の戻り値を引き回した。
              intからcharへの暗黙のナローキャストが発生しているので、コンパイラが警告を出した。
              明示的にキャストを追加したら警告が出なくなった。(明示的なキャストは「わかっててやってる」はずのものなので)
              幸せになったつもりが、不幸せになっていた。

アレゲはアレゲを呼ぶ -- ある傍観者

処理中...