我在 LWN 上看到了很多关于允许动态加载 Linux 安全模块 (LSM) 的文章,但无法找到有关如何实现它的具体信息。LSM 钩子(我不知道这是不是正确的术语)不再在内核中导出,但它们的地址可以被检索kallsyms_lookup_name
然后分配给函数声明。
有人提到LSM 挂钩不可卸载,但这是真的吗?它甚至意味着什么?如果 Linux 可加载内核模块注册了一些钩子,以后是否无法取消注册它们?为什么会出现这种情况?是否有解决方法或强制他们卸载的方法?
动态可加载 LSM 的编写方式是否必须与内置 LSM 不同?还是两者都使用相同的约定和接口?