mmapが失敗すると言われてバグを追っかけてたら、引数のfdが間違っているようだった。ただ間違っているだけかと思ったら、問題が起きる瞬間にfdの入っているメモリが壊されているようだった。0x00とか0xFFとかに壊れてくれればよかったのに、中途半端に0x12に壊れていたせいで、有効なfdだと判断されてデバイスドライバのmmapにいってそこでエラーになっていた。
ファイルディスクリプタ番号すらプロセスのメモリ上の変数に過ぎないのは、やはり何かUNIXは設計を間違っていると思う。
というか、kernelのドライバのバグだと思ってたら、ユーザプロセス内のメモリ破壊だったわけで、結果utraceを調べてたりしてるわけで、必要だけど不毛なメモリ破壊の調査を行うという一日だった・・・というかまだ終わってない・・・