В ядрах Linux нашли ошибку для языка Go
Начиная с ядра Linux 5.2 проблема вызывала завершения программ с ошибкой повреждения памяти. Почти всегда крашатся приложения на языке Go.
Программы на Go завершаются с ошибками “segmentation violation”, “runtime: unexpected return pc” и “runtime error: invalid memory address or nil pointer dereference”.
Как это работает?
Баг вызывает нарушение содержимого регистра AVX при возврате из обработчика сигнала, обрабатываемого при генерации исключения (page-fault). Проявляется при запуске многопоточных программ, в которых имеются вычисления с регистром AVX, в случае сборки ядра в GCC 9. В ранних выпусках GCC не проявляется: GCC 9 кэширует адрес переменной thread-local в регистре, а ранние версии — загружают его каждый раз.
Как устранить?
В ядре пока ничего не исправили. Есть вариант, что в runtime языка Go внесут изменения для обхода ошибки на проблемных ядрах.