В ядрах 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 внесут изменения для обхода ошибки на проблемных ядрах.

Залишити відповідь

Дякуємо, що поділились