1

命令ポイント ( regs->ip) をロード可能なカーネル モジュール (Linux 3.13 用) の関数の戻りアドレスに設定しようとしています。ただし、stack smashing検出をスローします。私の質問は、それを回避する方法です。

より具体的には、カーネル モジュールに命令ポイントを設定する前のユーザー ランド プロセスのスタックは次のようになります。

+--------+
|  foo   |
+--------+
|  bar   |
+--------+
| bottom |
+--------+

カーネル モジュールはip(命令ポイント) を の戻りアドレスに設定しbarます。これは明らかにスタック オーバーフローです...

fooそこで、カーネルモジュールでのリターンをシミュレートできれば、エラーが発生ipしないように設定できるかどうかを考えていsmashing detectedます。

まず、この推測は正しいですか?つまりfoo、カーネル空間での復帰をシミュレートすることで、barスマッシングを検出せずに復帰できますか?

第二に、それが正しければ、それをカーネル空間に実装する方法は?

更新: 言及すべき興味深い (または未定義の) 動作:bar関数は次のようになります。

foo(){
    call_into_kernel_module();
    printf("end of foo()");
}

bar(){
    ...
    char a[4];
    ...
    foo();
    printf("end of bar()");
}

aデータが入力されたり、後で参照されたりすることはありません。宣言を削除するsmashingと、なくなります。それ以外の場合はそのままです。end of bar()(ところで、私は印刷物で見ることができます)。

4

0 に答える 0