内存泄漏安全

问题描述 投票:0回答:1

我最近了解到,如果您执行

Box::leak(Box::new(value))
并收到
&'static
,那么在线程之间传输值就会变得更加容易。我有一个必须可以从不同线程访问的特定值,但是问题是我必须泄漏用户登录凭据,据我所知,如果我这样做,这些凭据将不会从内存中清除应用程序,退出。这让我想知道我是否不应该使用这种方法,或者现代操作系统是否有办法阻止恶意应用程序收集该数据?

security rust
1个回答
0
投票

据我所知,如果我这样做,这些凭据将不会从应用程序的内存中清除,退出

当进程终止时,操作系统将释放该进程分配的所有内存。 这包括所有泄漏的内存。

即使情况并非如此,您所描述的也不是内存安全问题。 “内存安全”意味着非常具体的东西,它本身并不包括阻止对密码等敏感信息的访问。 内存安全意味着以下事情是不可能的:

  • 越界读取或写入。
  • 双免。
  • 释放后使用。

我能想到的对内存安全最简洁的描述是“对值的引用始终指向有效值”(尽管这可能有点过于简单化)。

首先要解决内存泄漏的原因:如果您想做的只是在多个线程之间共享某些内容,请考虑使用

Arc
来代替。 这实现了一个线程安全的引用计数智能指针,当最后一个句柄被删除时,它将释放所保留的分配。 除非你正在做一些非常奇怪的事情或者原子操作的开销导致性能问题,否则你几乎总是可以使用
Arc
而不是泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.