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

时间:2015-11-29 18:01:23

标签: linux linux-kernel ubuntu-14.04

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

我的查询是,我能够在readwrite系统调用中获取文件描述符,但我无法理解如何使用相同的文件名获取文件名。

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

struct file *file;
file = fcheck(fd);

这个文件结构中有两个重要的实体,我相信这是我所关注的:

  1. f_path
  2. f_inode
  3. 有人可以使用与之关联的文件结构帮助我获取dentryinode或与此fd关联的路径名吗? 我的方法是否正确?或者我需要做一些不同的事情吗?

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

2 个答案:

答案 0 :(得分:1)

.f_inode实际上是一个inode。

.f_path->dentry是一种谴责。

通过->d_parent链接遍历此dentry,直到触及f_path.mnt.mnt_root dentry,并收集dentry->d_name个组件,将构建相对于挂载点的文件路径。这是通过例如d_path完成的,但是要更加谨慎。

除了应在RCU阅读部分中使用的fcheck(fd),您还可以使用fget(fd),而fput()应与macdeployqt配对。

答案 1 :(得分:0)

该方法完全不正确 - 请参阅http://www.watson.org/~robert/2007woot/

Linux已经有了一个可靠的机制来做这件事(审计)。如果你想要实现它(为了我假设的乐趣),你想把你的钩子大致放在审计所做的地方。机会是LSM钩子在适当的地方,没有检查。