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; // 省略其他字段 };
我想请教下,这个结构里的name和uptr字段到底有什么区别?在我这种Kprobe拦截的场景下,应该优先使用哪个字段来获取文件路径呢?
备注:内容来源于stack exchange,提问作者ma4stro




