ToDo:
フィルタつきの strace を速くしてみた
https://github.com/shinh/strace
PTRACE_SYSCALL て興味ないシステムコールが呼ばれた時も止まっちゃうんで、 seccomp-bpf を使って出力したいシステムコールだけ止めるようにして PTRACE_CONT を使う、て話。 strace が結構いじりやすいコードで、思ったよりラクに実現できた。
ファイルパス系だけ表示するフィルタを使いたくて、まぁ普通のプログラムとだとこれで速くなる割合は倍とかそのくらい。そんな程度ならどうでもいいんだけど、なんかこれじゃない strace 使うと数秒で終わるプログラムが一晩立っても終わらない、みたいなことが起きるんだよな。 trace のせいでタイムアウトつきの futex がタイムアウトしてしまって、全然次の状態に進めない、みたいなことが起きてるのだと思っていて、実際見てみるとそんな感じぽい。
ただこれの簡単な再現ケースを作るのがうまくいってない。できれば futex を生で使わず pthread だけでこれが起きる自然な例を作れればいいけど…無限に時間かかるようになるプログラム読めばいいって話もあるんだけど、これ結構でかいから場所を特定するの大変なんだよなぁ。
(22:10)
今のところ、 fork して exec までの間に seccomp かます作りなので、アタッチした場合はうまく動かない。これはまぁコードねじこめばなんとかなるけどめんどくさい。
あと -f ついてないとぶっこわれるという問題があって、これもイマイチではある。まぁこれもコードねじこめばなんとかなるんだけど。 seccomp て権限を増やすのできないイメージがあったけど、これは普通 prctl を殺すからで、 prctl 殺してなければ権限の復活は可能なのだった
(22:32)
前 | 2016年 4月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。