- 著者は、PowerPC32アーキテクチャ上で動作するgdbserverとマルチスレッドアプリケーションを含むプロジェクトのデバッグ問題に対処していた。
- 問題は、gdbserverへの接続が切断され、デバッグセッションをこれ以上制御できなくなったことだった。
- 調査と検証の結果、著者はこの問題を引き起こした正確なコミットを指し示すメールスレッドを発見した。
- 著者は、PowerPCアーキテクチャと
task_struct周辺の変更に関するコミット説明を読むのに3〜4日を費やし、この問題が後続のカーネルバージョンで解決されているかどうかを把握しようとした。
- 著者は、
thread_structスレッドの移動、paholeによるtask_structのレイアウト検査、ftraceを使ったデバッグ対象プロセスのスレッドがいつスケジューリングされるかの特定など、さまざまなツールと手法を用いた。
- 著者は、この問題がメモリ破損の問題である可能性を突き止めた。停止したスレッドは、他のスレッドと異なり一度しかスケジューリングされなかった。
- 著者はLinuxでハードウェアブレークポイントを使い、
__stateフィールドにハードウェアブレークポイントを配置して、誰がそこに書き込んでいるのかを特定するためのLinuxカーネルモジュールを実装した。
- 著者は、問題の原因が
ptrace_put_fprのバッファオーバーフロー(POKEUSER APIで使用される)にあり、その結果task_structの重要なフィールド、たとえば__stateが上書きされていることを発見した。
- 著者は、この問題がセキュリティ上の問題を引き起こす可能性があるため、この不具合を修正するパッチをLinuxカーネルのセキュリティチーム(security@kernel.org)に送った。
- PowerPCメンテナのMichael Ellermanは、著者のパッチを受け入れる代わりに、自身の版の修正を実装した。
- 著者は、自分の作業が正当に認められず、軽視されたように感じて怒りを覚えた。与えられたのは
Reported-byタグだけだった。
- 著者にとって最初のカーネルへの貢献は、自分の作業に対する適切な評価の重要性を重く見ない人々とのやり取りを通じて、強い苛立ちと落胆に満ちた経験だった。
1件のコメント
Hacker Newsの意見