木曜日, 4月 10, 2008

凄腕ハッカーのお仕事

 g新部さんのお仕事詳細が公開されている。

不具合が起こる条件

  • Instruction fetch される時に、
    • パイプラインが、結構、詰まってる
      • この詳細は ARM のパイプラインの詳細を知らないと分からないなぁ...
    • prefetch abort が起こるところに実行が移ろうとする
    • 該当の命令アドレスに対応した I-cache に "ldrd 命令" が載っかっている
      • ldrd 命令のパターンはこんな感じ:
               [COND]000PUIW0[Rn][Rd][addr_mode]1101[addr_mode]
      • ここで有効な ldrd 命令であること
        • 一般の ARM の話として
          • PW = 00 or 11
          • COND != 1111
        • ldrd 命令の特有の問題として
          • destination のレジスタ Rd は偶数 (最終bit は0)


 要約(^^;すると、パイプラインが詰まっていて、prefetch abort という例外が発生したとき、例外からの戻りアドレスに当るキャッシュに特定の値(ゴミ)があると、例外からの戻りアドレスが一命令先になる。

----------
 マイナーな CPU にはこんな性質の悪い bug もあるということか。

----------
 うーん、仕事でもないのにこんな bug を見つけられるなんて...、そのモチベーションはどこからくるんだ?


 

0 件のコメント: