You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux 5.15内核模块中使用Kprobe拦截_do_filp_open时,struct filename的name与uptr字段差异咨询

Linux 5.15内核模块中使用Kprobe拦截_do_filp_open时,struct filename的name与uptr字段差异咨询

大家好,我正在开发基于Linux 5.15版本的内核模块,想要给_do_filp_open函数做个包装器,用来检查被打开文件的路径。我用Kprobe机制来拦截这个函数的调用,代码如下:

static struct kprobe kp = {
    .symbol_name = "_do_filp_open",
    .pre_handler = sys_open_wrapper,
};

static int init_function(void) {
    int ret;
    printk("%s: initializing\n",MODNAME);
    ret = register_kprobe(&kp);
    // 此处省略后续处理代码
}

目前已经能正常触发包装器的预执行逻辑了。现在我需要获取被打开文件的完整路径,发现_do_filp_open的参数里包含一个struct filename结构,它的定义是这样的:

struct filename {
    const char      *name;  /* pointer to actual string */
    const __user char   *uptr;  // 省略其他字段
};

我想请教下,这个结构里的nameuptr字段到底有什么区别?在我这种Kprobe拦截的场景下,应该优先使用哪个字段来获取文件路径呢?

备注:内容来源于stack exchange,提问作者ma4stro

火山引擎 最新活动