来自内核模块中的函数的EFAULT

时间:2012-11-26 08:28:15

标签: c linux-kernel kernel-module kernel rootkit

我试图比较两个文件名是否通过检查其inode和设备ID是否匹配来引用同一文件。目前,我致电vfs_stat以获取ID。

问题是,如果我传递vfs_stat存储在用户空间中的文件名,它可以正常工作,但如果我传递一个文件名,该文件名作为全局变量存储在我的内核模块中,则会错误{{ 1}}

是否有其他方法可以获取ID或比较两个文件是否相同?

1 个答案:

答案 0 :(得分:2)

vfs_stat采用存储在用户空间中的文件名。但是如果你在源代码中跟踪该调用,你会看到(在fs / stat.c中)基本上有两个部分。从用户空间文件名字符串中查找struct path,然后根据路径结构的内容调用VFS stat操作。所以你可以从内核空间做同样的事情。查看kern_path()以查找struct path以查找存储在内核空间中的文件名。从那里,您可以直接致电vfs_getattr()。完成后不要忘记path_put

基本上,您正在使用vfs_fstatat()的重要位。但也要考虑你是否可以在没有stat调用的情况下进行管理路径结构中的某个地方有一个inode指针,这可能足以满足您的目的。