1

カーネル ubuntu 2.6.36 で LSM フレームワークを使用したいと考えています。

カーネル モジュールをコンパイルすると、次のように書かれていました。

警告: "register_security " 未定義!

多くのグーグル検索の後、その理由は、register_security()シンボルが 2.6 カーネルでエクスポートされなくなったためであることがわかりました。

そこでEXPORT_SYMBOL(register_security)、../security/security.c ファイルに追加し、カーネルを再コンパイルしました。

extern int register_security(struct security_operations *ops)新しいカーネルで起動した後、カーネル モジュール ファイルを追加し、モジュールを再度コンパイルしました。ただし、WARNING 情報はまだ存在していました。insmodeモジュールに進むとdmesg

不明なシンボル register_security

私は何をすべきか?Linux セキュリティ モジュールを登録するにはどうすればよいですか?

4

3 に答える 3

0
Unknown symbol register_security

LSMの登録を解除した行で発生しました。したがって、security.cにunregister_security()を追加し、エクスポートします。

 /**
 *  unregister_security - allows security modules to be moved
 * @ops : a pointer to the struct security_options that had been registered before.
 */
 int unregister_security(struct security_operations *ops)
{
        if (ops != security_ops) 
      {
                printk (KERN_INFO "%s: trying to unregister "
                        "a security_opts structure that is not "
                         "registered, failing.\n", __FUNCTION__);
                return -EINVAL;
         }
     security_ops = &dummy_security_ops;
      return 0;
}
 EXPORT_SYMBOL(unregister_security);

そして、カーネルを再コンパイルしました。

于 2012-07-20T05:11:38.293 に答える
0
  1. 新しくロードされたカーネルがあなたによってコンパイルされたものであることを確認してください。
  2. モジュールのライセンスを確認してください (参照: http://lists.jammed.com/linux-security-module/2004/08/0053.html )
于 2010-11-15T04:42:26.010 に答える
0

最新のカーネルでは、register_security シンボルはエクスポートされません。これは、LSM モジュールをモジュールとして登録できないことを意味します。しかし、あなたが本当にそれをしたいのであれば、それを行うことができます:) のようなエクスポートされたLSMシンボルを見てくださいsecurity_sb_copy_data。これらは、 の単純なラッパーsecurity_ops->some_lsm_methodです。したがって、それらのコードを使用してsecurity_opsポインター値を決定できます。ただし、逆アセンブラが必要です。

于 2012-02-04T12:17:59.277 に答える