Linux 内核中已发现一个错误,该错误会导致某些使用 AVX 的程序出现故障

自 5.2 版本以来的 Linux 内核中, 表现出来 从引发异常(页面错误)时处理的信号处理程序返回时,会导致 AVX 寄存器的内容被破坏的错误。 当运行涉及 AVX 寄存器计算的多线程程序(“-pthread”)时,如果内核是在 GCC 9 中构建的(如果是在早期版本的 GCC 中构建的,则不会出现该错误,因为 GCC 9 缓存寄存器中线程局部变量的地址,早期版本的 GCC 每次都会加载它)。

该问题会导致程序因内存损坏错误而提前终止。 最明显且最常观察到的错误表现 崩溃 应用,用Go语言编写。 由于上述问题,Go 程序提前终止,通常会出现错误“运行时错误:无效的内存地址或 nil 指针取消引用”、“运行时:意外返回 pc”和“分段冲突”。 内核中的错误仍未修复。 正在考虑可能性 添加对 Go 语言运行时的更改,以选择性地绕过有问题的 Linux 内核上的错误,但代价是额外的开销。

来源: opennet.ru

添加评论