## Go 运行时:深入内存分配器
Go 运行时内存分配器高效管理程序获取内存的方式,充当需要持久存在于函数调用之外的数据的“仓库经理”(堆)。与直接从操作系统请求内存(一个缓慢的过程)不同,Go 请求大块内存( arenas,通常为 64MB)并在内部管理分配。
Arenas 被划分为 8KB 页面,然后划分为包含单一大小对象的 *spans*,根据对象大小以及是否包含指针(scan/noscan)分为 68 个 *尺寸类别*(8B-32KB)。这避免了碎片并加快了分配速度。微小对象(<16B)被打包在一起以提高效率。
为了处理来自许多 goroutine 的并发分配,使用了三级缓存层次结构:每处理器 *mcaches*(无锁),每 span 类 *mcentrals*(简短锁),和全局 *mheap*(昂贵的锁)。这最大限度地减少了争用。
分配器与垃圾收集器紧密合作,使用位图跟踪存活对象。未使用的内存最终由后台 *scavenger* 返回给操作系统。该系统通过最大限度地减少系统调用和利用缓存来优先考虑速度,使 Go 的内存管理具有高性能。
## Hydroph0bia 漏洞 (CVE-2025-4275) – 修复分析与厂商响应
本文详细分析了 Insyde 针对 Hydroph0bia 漏洞的修复方案,该漏洞影响众多 OEM 厂商。禁运期结束后,只有戴尔迅速发布了解决该问题的 BIOS 更新。联想计划在 7 月 30 日前发布修复,Framework 承认了漏洞但未给出时间表,其他厂商(宏碁、惠普、富士通等)保持沉默。
对戴尔更新的 BIOS 进行逆向工程显示,修复主要位于 SecureFlashDxe 驱动程序中,添加了代码以删除可能被篡改的变量,并实施了 VariablePolicy 以防止其重新设置。然而,作者指出该修复并非万无一失,可能可以通过直接 NVRAM 操作(SPI 编程/闪存写入绕过)来绕过。
Insyde 承认曾尝试更强大的解决方案,但导致了回归问题,最终采用了当前这种不太理想的实现方式。他们承诺未来将发布修复程序,消除对 NVRAM 在安全敏感数据方面的依赖。作者赞扬了 Insyde 在整个披露过程中的响应速度和协作精神。将对新购买的配备 Intel BootGuard 的宏碁 Swift Go 16 进行进一步测试,以验证研究结果。
资源(BIOS 镜像、报告、驱动程序)可在 GitHub 上获取。