たとえば、sys_* (sys_open など) ハンドラをフックします。ユーザー空間から渡された引数に悪意があることがわかった場合は、ユーザー空間のスタック トレースを出力します。どうすればいいですか?
(dump_stack() はカーネルスタックのみを出力します)
たとえば、sys_* (sys_open など) ハンドラをフックします。ユーザー空間から渡された引数に悪意があることがわかった場合は、ユーザー空間のスタック トレースを出力します。どうすればいいですか?
(dump_stack() はカーネルスタックのみを出力します)
カーネル内のターゲットプロセスに、コアダンプファイルを生成できるシグナル (SIGBUS、SIGKABRT など) を送信できます。
例えば:
do_send_sig_info(SIGABRT, SEND_SIG_FORCED, current, true);
次に、gdb を使用して、生成されたコア ファイルのバックトレースを表示できます。
適用範囲が限られているため、非常に注意が必要です。
oprofile
はユーザー空間スタック トレースをサポートしており、これらはユーザー空間スタックをウォークすることによってカーネルで計算されます。(ただし、シンボルは解決されないことに注意してください。これは、ユーザー空間のレポート ツールによって行われます。)
この問題を解決しなければならない場合は、oprofile コードを (再び) 調べて、そこにあるものを使用/適応させるだけです。
おそらく、この種の「悪意のある」発生は、記録される一種の oprofile イベントとして単純にモデル化される可能性があります。