LSM (Linux Security Module)のコードを読み始めた。フックは indirect call で実装されているが、大域変数 security_ops からたどっているので、同時には一つの Security Module にしかシステムコールの正否の判定のチャンスが得られない。特にその大域変数も守られていないので あとからロードした Security Module が上書きできるので最後にロードされた Security Module が有効ということか。デフォルトでダミーのデータが確保されているから、なんとかできなくもないが、Security Module を分割して実装するのがちと大変そう。フックの実装は TrustedBSD のフレームワークの方が柔軟性が高いな。

フックの場所はシステムコールの入り口だけでなく、VFS, socket, SysVIPC等の結構深いところのレイヤに用意されているから、判定の関数の実装はわりと簡単にいろいろできそう。

[追記 (2003/10/20)]
http://d.hatena.ne.jp/qux/20031020
を見ると、モジュールのスタックは一応できるようになっているようだが、先にロードされたモジュールが面倒みるようになっているのか。

mod_reg_security() => security_ops->register_security(name, new_ops)

うーむ。。。