Linux 将文件描述符解析为文件名/文件路径

Linux 将文件描述符解析为文件名/文件路径,linux,linux-kernel,ubuntu-14.04,Linux,Linux Kernel,Ubuntu 14.04,我目前正在开发一个简单的内核模块,它可以窃取系统调用,例如open、read、write,并用一个简单的函数替换它们,该函数将打开、读取、写入的文件记录到一个文件中,并返回原始的系统调用 我的问题是,我能够在read和write系统调用中获取文件描述符,但我无法理解如何使用相同的描述符获取文件名 目前,我可以使用以下代码访问与给定FD关联的文件结构: struct file*文件; file=fcheck(fd); 这个文件结构中有两个重要的实体,我认为这是我关心的问题: f_路径 f_ino

我目前正在开发一个简单的内核模块,它可以窃取系统调用,例如
open
read
write
,并用一个简单的函数替换它们,该函数将打开、读取、写入的文件记录到一个文件中,并返回原始的系统调用

我的问题是,我能够在
read
write
系统调用中获取文件描述符,但我无法理解如何使用相同的描述符获取文件名

目前,我可以使用以下代码访问与给定FD关联的文件结构:

struct file*文件;
file=fcheck(fd);
这个文件结构中有两个重要的实体,我认为这是我关心的问题:

  • f_路径
  • f_inode
  • 有人能帮我使用与此fd相关联的文件结构获取与此fd相关联的
    dentry
    inode
    或路径名吗? 我的方法正确吗?还是我需要做些不同的事情


    我正在使用Ubuntu 14.04,我的内核版本是3.19.0-25-generic,用于内核模块的开发。

    。f_inode
    实际上是一个inode

    .f_path->dentry
    是一个dentry

    通过
    ->d_parent
    链接遍历此dentry,直到触及
    f_path.mnt.mnt_root
    dentry,然后收集
    dentry->d_name
    组件,将构建文件相对于装入点的路径。这是通过,例如,使用,但更谨慎的方式来完成的


    除了应在RCU读取部分中使用的
    fcheck(fd)
    ,您还可以使用
    fget(fd)
    ,该方法应与
    fput()配对使用。

    该方法完全不正确-请参阅


    Linux已经有了一个可靠的机制来做这件事(审计)。如果你想实现它(我想是为了好玩),你应该把钩子大致放在审计的地方。LSM挂钩可能在适当的位置,但尚未检查。

    很抱歉没有及时确认,您的方法确实帮助了我。谢谢。