У ядры Linux выяўлена памылка, якая прыводзіць да парушэння працы некаторых праграм, выкарыстоўвалых AVX

У ядры Linux, пачынальна з выпуску 5.2, праяўляецца памылка, якая прыводзіць да парушэння змесціва рэгістра AVX пры звароце з апрацоўшчыка сігналу, апрацоўванага пры генерацыі выключэння (page-fault). Праблема ўзнікае пры запуску шматструменных праграм («-pthread»), у якіх маюцца вылічэнні з рэгістрам AVX, у выпадку зборкі ядра ў GCC 9 (пры зборцы ў больш ранніх выпусках GCC памылка не выяўляецца, бо GCC 9 кэшуе адрас зменнай thread-local у рэгістры, а больш раннія версіі GCC загружаюць яго кожны раз).

Праблема прыводзіць да заўчаснага завяршэння праграмы з памылкай пашкоджання памяці. Найбольш прыкметным і часта назіраным праявай памылкі сталі крахі прыкладанняў, напісаных на мове Go. З-за адзначанай праблемы праграмы на мове Go заўчасна завяршаюцца, як правіла, з памылкамі "runtime error: недапушчальнае памяшканне адрасоў або ніл патэлефанаваць", "runtime: unexpected return pc" і "segmentation violation". У ядры памылка пакуль застаецца нявыпраўленай. Разглядаецца магчымасць даданні ў runtime мовы Go змен для выбарачнага абыходу памылкі на праблемных ядрах Linux, коштам з'яўлення дадатковых накладных выдаткаў.

Крыніца: opennet.ru

Дадаць каментар