1

現在、Linux セキュリティ モジュール (LSM) に依存する Linux カーネル モジュールを作成していますが、現時点では何もありません。ファイルが開かれるたびに簡単なメッセージを出力したかっただけです。問題は次のとおりです。フックに登録するには、関数 register_security が必要です。これは、グーグルで調べた後にわかりましたが、もうエクスポートされていないため、ロード可能なカーネルモジュールでは使用できません-カーネルに直接コンパイルされたモジュールでのみ使用できます. もちろん、これはセキュリティモジュールにとっては理にかなっていますが、開発している私にとっては最悪です。さて、あなたへの質問: 私のモジュールをカーネルにパッチする方法はありますか? つまり、バグ修正や小さな変更のたびにカーネルを再コンパイルしたくありません。新しい試行ごとにPCを再起動することで生活できますが、再コンパイルには少し時間がかかると思います..

編集:うーん、まだ誰も:(私はちょうどアイデアを持っていました.それが良いかどうか誰かが教えてくれるかもしれません.必要な関数のカーネルソースにEXPORT_SYMBOLを追加してから、再コンパイルしてから追加してください.モジュールとしてのコード? もちろん、これはテストとデバッグのためだけのものです

4

3 に答える 3

0

しばらく前にあなたの質問を見たので、これは少し遅いかもしれません。私が良い解決策であるとわかったのは、カーネルにコンパイルして、何を操作するかをいくつかの関数をエクスポートするモジュールを作成することです。

例えば

//REGISTER FILE_PERMISSION
static void k_register_file_permission(int (*my_file_permission) (struct file *file, int mask)) {
  my_file_permission_func = my_file_permission;
}
EXPORT_SYMBOL(k_register_file_permission);

次に、カーネルモジュールからk_register_file_permissionを呼び出すだけで、開発プロセス中に便利になります。

次のような関数も必要になります

int k_file_permission (struct file *file, int mask) {
  if(my_file_permission_func == NULL) 
  {
    //do nothing
  }
  else
  {
    return my_file_permission_func(file, mask);
  }
  return 0;
}

起動時にLSMに登録すること。

于 2011-05-05T16:30:23.543 に答える
0

いいえ、ありません。シンボルがエクスポートされていない場合、カーネル内リンカはそれを見つけることができません。ただし、テストに使用するカーネルにエクスポートを追加しても問題ありません。モジュールを ./include/linux/Kbuild に追加することで、モジュールをエクスポート リストに追加できます。

また、(user-mode-linux)[http://user-mode-linux.sourceforge.net/] または仮想ボックスでテストする場合、カーネル全体を再コンパイルすることはそれほど大きな問題ではないかもしれません。

于 2011-03-11T08:39:10.560 に答える
0

fsnotifyカーネルで、またはfanotifyユーザー空間から使用することはできませんか?

作成者がエクスポートするのは良い考えではないと考えた関数をエクスポートすることは、一般的には良い考えではありません。パブリック インターフェイスの一部ではない関数を呼び出し、その関数に副作用があると、問題が発生する可能性があります。さらに、あなたのモジュールは他のマシンでは動作しませんが、これは気にしないかもしれません。

于 2011-03-11T08:32:39.743 に答える