【问题标题】:Linux kernel struct file pointerLinux内核结构文件指针
【发布时间】:2012-09-07 03:23:21
【问题描述】:

是否保证结构文件指针在其打开到关闭的生命周期中不会被释放和重新分配到内存中的其他位置?

我想唯一标识传递给设备驱动程序的文件结构(通过读/写/打开等),并且想知道是否可以只使用指向文件结构的指针进行标识。我看到的唯一另一种选择是在 private_data 中存储一个唯一标识符,如果不能保证结构文件指针不会改变。

【问题讨论】:

  • 我假设您的意思只是通过文件的生命周期(打开->关闭),而不是像这样,它永远会被释放吗?
  • 是的,只是通过生命周期。
  • IIUC,{devicenumber,inodenumber} 是文件的自然键。在数据建模的意义上,指针在功能上依赖于它们。原始指针值可能及时稳定,但我不相信它。免责声明:该死,Jim,我是 DBA,而不是内核黑客。
  • 文件结构表示进程中打开的文件,而不是文件系统中由devnumber/inodenumber表示的实际文件。所以你可以有多个文件结构指向同一个设备/inode。
  • wildplasser:在 linux 内核中,用于打开和关闭的字符设备回调接收 struct inode *struct file *。您可以使用inode 来了解您正在处理/dev 中可能的多个条目中的哪一个。每一个都可以被多个独立的线程访问。这些独立线程中的每一个都可以在该 inode 上调用 open(),它们会得到一个独立的 struct file *。通常,当内核开发人员使用 struct file * 时,他们会使用一个名为 private_data 的字段来存储指向他们正在使用的自定义数据的指针。

标签: linux kernel driver linux-device-driver file-structure


【解决方案1】:

指针不会发生任何事情。但是你必须确保如果这个指针被传递到内核用户边界(或计算机网络),你实际上检查你得到的指针是一个有效的指针,也许是一个合适的指针(预期从这个特定的来电者,如果你能识别他们)。否则你会有一个巨大的安全漏洞。

【讨论】:

  • 结构文件指针都在内核态,我相信文件描述符用于用户态。你怎么知道指针不会发生任何事情?
  • 当前内核不移动结构并不意味着有一天它们会移动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多