从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 漏洞名称:secretmem: disable memfd_secret() if arch cannot set direct map - 漏洞描述:在某些arm64配置中,如果标记的4k PTEs在直接映射中不存在,那么memfd_secret()系统调用将返回-ENOSYS。这可能导致memfd_secret()看似正常工作,但实际上没有达到其目标,即从直接映射中移除其内存。 2. 影响范围: - 受影响的系统:arm64系统,特别是那些在can_set_direct_map()返回false时,且CONFIG_RODATA_FULL_DEFAULT_ENABLED、CONFIG_DEBUG_PAGEALLOC和CONFIG_KFENCE配置为n的系统。 - 受影响的配置:大多数arm64系统实际上有工作memfd_secret(),但不受影响。 3. 修复措施: - 修复方法:在某些情况下,禁用memfd_secret()系统调用可能是更合适的行为,而不是返回错误。 - 修复历史:这个修复措施是在一系列memfd_secret()补丁系列中实现的,最初是为了避免在某些情况下返回错误,但后来在v16和v17版本中被移除。 4. 参考链接: - 与该漏洞相关的链接和讨论,包括原始问题的讨论和修复过程的详细信息。 5. 补丁内容: - 补丁代码:展示了补丁的代码变更,包括在memfd_secret()函数中添加的条件判断,以检查是否可以设置直接映射。 这些信息可以帮助我们理解漏洞的背景、影响范围和修复措施,以及如何通过代码变更来解决这个问题。