我认为这是预期的行为?
来自:http://classic.chem.msu.su/cgi-bin/ceilidh.exe/gran/gamess/forum/?C35e9ea936bHW-7675-1380-00.htm
释义摘要:“在Linux端口上工作,我们发现cudaHostAlloc / cuMemHostAlloc CUDA API调用返回未初始化的固定内存。这个漏洞可能允许人们检查以前由其他程序和Linux内核使用的内存区域。我们建议每个人都停止在任何多用户系统上运行CUDA驱动程序。“
我的理解是“Normal”malloc返回未初始化的内存,所以我看不出这里有什么不同......
我理解内存分配如何工作的方式将允许以下方式发生:
-userA在系统上运行一个程序,该系统会处理大量敏感信息。完成计算后,结果将写入磁盘,进程退出,userA注销。
-userB登录下一步。 userB运行一个程序,该程序请求系统中所有可用内存,并将其未初始化内存的内容写入磁盘。
将内存中包含一些userA的敏感信息留在RAM中。我必须在这里遗漏一些东西。它是什么?记忆是否在某处?内核/固定内存是否以相关方式特殊?
答案 0 :(得分:1)
malloc()返回的内存可能非零,但只能在相同进程中的其他代码使用和释放后使用。从来没有另一个过操作系统应该严格执行进程之间的内存保护,即使它们已经退出。
内核/固定内存的特殊之处在于它显然为内核模式驱动程序提供了破坏操作系统进程保护的机会。
所以不,这不是预期的行为;是的,这是一个错误。感谢NVIDIA如此迅速地采取行动!
答案 1 :(得分:1)
需要root权限才能安装CUDA的唯一部分是NVIDIA驱动程序。因此,使用NVIDIA编译器和链接完成的所有操作都可以使用常规系统调用和标准编译来完成(前提是您有正确的信息-lol-)。如果有任何安全漏洞,那么它仍然存在,不管是否更改cudaHostAlloc / cuMemHostAlloc。
我对这篇文章中的第一个答案表示怀疑。 malloc的手册页指定了 内存未清除。免费的手册页没有提到任何内存清除。 清除记忆似乎是敏感部分编码员的责任 - 恶意 - 留下了意外(罕见)退出的问题。除了VMS(良好但未广泛使用的操作系统),我不认为任何操作系统接受系统清算的性能成本。我不清楚系统可能在新分配的内存堆中跟踪以前在进程区域中的内容,以及未处理的内容。
我的结论是:如果您需要严格的隐私级别,请不要使用多用户系统 (或使用VMS)。