You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从系统调用确定对应的LSM钩子?含openat实例疑问

判断系统调用与LSM钩子对应关系的通用方法

1. 从LSM钩子的封装函数入手

每个LSM钩子都会对应一个security_xxx格式的封装函数(比如file_open对应security_file_open),直接在内核源码中全局搜索这个封装函数的调用位置,就能找到它被系统调用路径触发的点。比如你关注的security_file_open,实际是在fs/open.c的do_dentry_open函数里被调用的——这个函数是do_sys_openat后续调用的关键流程,负责完成文件对象的初始化,自然会触发文件打开相关的LSM钩子。

2. 顺着系统调用的完整执行链路追踪

系统调用的执行往往会经过多层函数调用,不要只停留在do_sys_xxx这类顶层封装,要继续往下追踪:

  • 以openat为例,完整执行链路是:sys_openat -> do_sys_openat -> do_filp_open -> path_openat -> do_dentry_open,security_file_open正是在do_dentry_open中被调用。
  • 可以利用代码阅读工具的函数调用链功能,或者直接在源码中搜索函数的调用者,逐步梳理完整流程。

3. 借助LSM框架的生成规则

LSM钩子的定义和调用是通过宏自动生成的,查看include/linux/lsm_hook_defs.h里的钩子定义,每个钩子都会关联对应的调用点生成逻辑。你还可以查看security/security.c中的LSM核心逻辑,了解钩子如何被统一调度执行。

4. 参考内核文档与成熟LSM实现示例

内核文档Documentation/security/LSM中包含钩子与系统调用关联的说明;另外可以参考SELinux、AppArmor这类成熟LSM模块的实现,看它们如何挂载特定钩子来拦截对应系统调用——比如通过SELinux的file_open钩子实现,能反向推导出调用该钩子的系统调用路径。


内容的提问来源于stack exchange,提问作者phoxd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:28:31