Переход Firefox на zlib-rs выявил ошибку в микрокоде Intel Raptor Lake (13/14 поколения) Организация Trifecta Tech Foundation (разработчик ntpd-rs, su…
Организация Trifecta Tech Foundation (разработчик ntpd-rs, sudo-rs, zlib-rs) рассказала о переходе Firefox на библиотеку zlib-rs для сжатия gzip. Переход с zlib на zlib-rs дал ускорение от 3.3 до 32.5 раз при единичных операциях декодирования и от 2.7 до 10.86 раз при декодировании непрерывного потока.
Однако после интеграции zlib-rs в Firefox 151 пользователи столкнулись с аварийными завершениями из-за выхода за границы буфера (в Rust это приводило к панике, в Си — к незаметному повреждению данных). Проблема воспроизводилась не у всех, а в бета-тестировании не проявилась. После выяснения закономерности оказалось, что сбой вызван ошибкой в микрокоде CPU Intel Raptor Lake (13 и 14 поколения): инструкция mov byte ptr [rsi + rdi + 1], ch записывала в память не биты 8-15 (регистр CH), а биты 0-7 (регистр CL). LLVM 22 генерировал эту инструкцию, в LLVM 23 она уже не генерируется.
В Firefox 152 ошибка устранена обходным путём (патч в zlib-rs), но проблема остаётся на уровне микрокода Intel.
🐧Обсудить в Чате Linux