【问题标题】:How to obtain a pathname or dentry or struct file from a given inode?如何从给定的 inode 获取路径名、dentry 或 struct 文件?
【发布时间】:2012-01-23 07:05:59
【问题描述】:

我需要知道如何从给定的 inode 中获取路径名或 dentrystruct file

我使用file_open 从路径名获取struct file,但总是让内核崩溃。我需要一种方法来将我的 inode 列表中的一个 inode 与路径名中的一个 inode 进行比较,或者比较磁盘中的所有 inode 以找到相应的路径名,然后与我的 inode 列表进行比较。

【问题讨论】:

    标签: linux-kernel kernel inode pathname


    【解决方案1】:

    此示例代码在 Linux 内核版本 2.6.xx 中运行良好

    struct dentry *sample_dentry = NULL;
    struct inode *tmp_inode = &inode_need_to_get;
    struct list_head *tmp_list = NULL;
    list_for_each(tmp_list, &(tmp_inode->i_dentry))
    {
        sample_dentry = list_entry(tmp_list, struct dentry, d_alias);
        printk(KERN_EMERG, "name of file is %s\n", sample_dentry->d_iname);
    }
    

    如果这个文件有一个硬链接,每个 inode 对象都会有一个或多个 dentries 对象。

    【讨论】:

      【解决方案2】:

      一般来说,这是极难做到的。

      一个inode 可能有数千个路径名。所有名称都同样“有效”。即使在不支持多链接的文件系统上,该文件也可能被绑定到系统中的任何其他位置数千次。

      AppArmorTOMOYO mandatory access control 系统都依赖于路径名——但有一个巨大的区别:访问控制是在特定文件描述符上执行的,它以特定名称打开,并且两个工具都使用 那个 特定名称。

      查看 security/apparmor/path.c 函数 aa_get_name()security/tomoyo/file.c 函数 tomoyo_get_realpath() 以获取有关从 inode 查找路径名的详细信息 - 提供其他支持信息。仅从普通的 inode 对象来看,我认为您可能不走运。

      【讨论】:

      • 我的工作是进行系统调用,阻止读取和写入给定文件我正在实现以下内容: 为捕获由 filp_open 函数创建的 inode(路径, O_CREAT, 00777)(这项工作)并添加到链表中。然后我创建了一个函数,该函数将一个 inode 作为参数,该文件的路径并在列表中检查它,如果返回 1,否则返回 0。我将此函数放在系统调用 open () 中,但使用 filp_open (path, FLAG, x ) 后跟 filp_close() 出现以下错误:
      • O_CREAT FLAG = x = 00777 -> 内核内存很快就会填满内核启动 FLAG = 0 和 x = O_RDONLY -> 内核启动时出现内核恐慌
      • 用这个描述编辑你的原始问题可能会更好——编写适合评论框并且仍然清晰易读的内容非常困难。 :)
      猜你喜欢
      • 2013-06-17
      • 2015-12-06
      • 1970-01-01
      • 2018-08-28
      • 2012-06-02
      • 2011-07-13
      • 1970-01-01
      • 2013-08-28
      • 2018-01-12
      相关资源
      最近更新 更多