如何安全地使用mmap()进行阅读?

时间:2018-10-04 21:47:47

标签: linux file-io posix mmap

我需要在一个大文件中进行大量随机访问读取,因此我使用mmap()。只要未更改映射文件,此解决方案就似乎是完美的。但这并非总是如此。如果映射文件被篡改,则会出现几个问题:

  • 如果对文件的更改减小了文件的长度,或者文件变得不可访问,则为了生存的进程必须处理SIGBUS信号(至少在Linux实现中)。由于我正在编写库,因此增加了更多的复杂性。

  • 为使情况更糟,mmap()联机帮助页上说,未明确更改原始内容 文件被传播到内存。因此它们可以很好地传播。 从本质上讲,这意味着我使用的文件的内容随时可能变成白噪声。

所有这些是否意味着任何可映射可自由访问的文件且不处理这些问题的程序都可以被DoS攻击所破坏?即使我不希望邪恶的黑客追随我的程序,但我仍然可以轻松地看到用户修改了我的映射文件,将其替换为另一个文件,或者使文件无法被removing a USB drive访问。虽然我可以write a signal handler(这有点混乱,所以我正在寻找更好的解决方案)来解决第一个问题, 我不知道如何解决第二个问题。

如果程序不使用该文件,则该文件无法复制,并且可以自由移动(就像其他任何媒体文件一样)。 Linux文件锁并不总是有效。

那么,如何安全地使用mmap()进行阅读?

0 个答案:

没有答案