gpt4 book ai didi

Linux:如何防止文件支持的内存映射导致访问错误(SIGBUS 等)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:36 27 4
gpt4 key购买 nike

我想为内存映射文件 io 编写一个包装器,它要么无法映射文件,要么返回一个在取消映射之前有效的映射。使用普通 mmap 时,如果底层文件在映射时被截断或删除,就会出现问题。根据 mmap 的 linux 手册页,如果在截断后访问文件新末尾之外的内存,则会收到 SIGBUS。无法捕捉此信号并以这种方式处理错误。

我的想法是创建文件的副本并映射副本。在具有 Cow 能力的文件系统上,这会带来很小的开销。

但问题是:如何保护副本不被另一个进程操纵?临时文件不是真正的选择,因为理论上恶意进程仍然可以改变它。我知道 Linux 上有文件锁,但据我所知,它们要么是可选的,要么不会阻止其他人删除文件。

我要求两种答案:要么是一种以坚如磐石的方式映射文件的方法,要么是一种完全保护临时文件免受其他进程影响的机制。但也许我解决问题的整个方法是错误的,所以请随意提出激进的解决方案;)

最佳答案

您无法阻止熟练而坚定的用户故意搬起石头砸自己的脚。只需采取合理的预防措施,以免意外发生。

  • 大多数程序假定输入文件不会改变,这通常没问题
  • 想要处理与合作程序共享的文件的程序使用文件锁定
  • 需要私有(private)文件的程序将创建一个临时文件、快照或其他——如果它们取消链接以进行自动清理,也无法通过 fs 访问它
  • 想要保护其数据免受所有常规用户操作影响的程序将作为专用系统帐户运行,在这种情况下 chmod 足以提供保护。

任何有权访问同一帐户(或 root)的人都可以通过简单的 kill -BUS、chmod/truncate 或任何更高级的手段(例如复制和修补二进制文件、克隆其 FD 或附加调试器。如果那是他们想要做的,您无权阻止他们。

关于Linux:如何防止文件支持的内存映射导致访问错误(SIGBUS 等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51450593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com