Серьёзная ошибка в многопоточности процессоров Skylake и Kaby Lake


    В течение апреля и мая 2017 года компания Intel обновила документацию к процессорам Skylake и Kaby Lake, добавив одно небольшое примечание (errata KBL095, KBW095 для Kaby Lake, errata SKW144, SKL150, SKX150, SKZ7 для Skylake). Оно звучит следующим образом:

    «В сложных микроархитектурных условиях краткие циклы менее чем из 64 инструкций с использованием регистров AH, BH, CH или DH, а также соответствующих более широких регистров (например, RAX, EAX или AX для AH) могут вызвать непредсказуемое поведение системы. Такое может произойти только если активны оба логических процессора на одном физическом процессоре».

    Что означает это примечание — 25 июня 2017 года подробно объяснили в почтовом списке рассылки разработчиков Debian. Если вкратце, то процессоры Skylake и Kaby Lake с включенным HyperThreading могут вести себя неадекватно. Разработчики рекомендуют немедленно отключить HyperThreading в BIOS/UEFI, а потом обновить микрокод процессора от Intel или дождаться обновления BIOS/UEFI от своего вендора.

    Ошибка затронула процессоры Intel Core 6-го и 7-го поколений, в том числе десктопные, встроенные, мобильные и HEDT, соответствующие версии серверных процессоров (такие как Xeon v5 и Xeon v6), а также некоторые модели процессоров Intel Pentium. Самый ранний процессор с наличием этого бага вышел в сентябре 2015 года. Если ваш процессор выпущен раньше этого времени или он не принадлежит к семействам Skylake и Kaby Lake, то данное предупреждение можно игнорировать.

    Список всех процессоров Skylake
    Список всех процессоров Kaby Lake


    Некоторые процессоры из списка не подвержены ошибке, потому что не поддерживают HyperThreading

    Баг действительно неприятный. «Непредсказуемое поведение системы» может проявиться в непроизвольных ошибках приложений и системных ошибках, повреждении данных и потере данных.

    Предупреждение опубликовано в списке рассылки Debian, потому что проблема уже затронула нескольких пользователей стабильной ветки Debian. В то же время аналогичные неприятности могут возникнуть у пользователей на любой операционной системе, не только Debian и не только Linux.

    Чтобы избежать проблемы, необходимо или отключить HyperThreading, как уже упоминалось, или установить официальный фикс. Компания Intel задокументировала описание бага в документации для Core 6-го поколения, Core 7-го поколения, Xeon v5 и v6, а также X series Core 6-го поколения.

    В списке рассылки для пользователей Debian владельцам процессоров Kaby Lake рекомендуется связаться с производителями материнской платы и запросить обновление BIOS/UEFI, а до того момента отключить HyperThreading.

    Для владельцев процессоров Skylake, в зависимости от модели, может быть доступен пакет intel-microcode. В списке рассылки Debian объясняется, кто может установить этот пакет с номером версии 3.20170511.1 на операционных системах Debian GNU/Linux 9 «Stretch» и Debian GNU/Linux 8 «Jessie». Сначала нужно узнать номер модели и степпинг своего процессора. Пакет с микрокодом подходит только для процессоров модели 78 или 94, со степпингом 3, то есть для процессоров с подписями 0x406E3 и 0x506E3. Чтобы узнать характеристики, следует запустить из терминала следующую команду:

    grep -E 'model|stepping' /proc/cpuinfo | sort -u

    Если процессор соответствует указанным условиям, то можете обновить микрокод, следуя инструкциям из вики Debian.

    В ином случае совет такой же: отключить HyperThreading и дожидаться обновления BIOS/UEFI.

    Intel выпустила также микрокод Kaby Lake, который исправляет баг, но он доступен только для производителей оборудования, поэтому следует дожидаться обновления BIOS/UEFI, чтобы получить этот код. Разработчики Debian отмечают, что Intel внесла изменения в микрокод в начале апреля 2017 года. Поэтому есть вероятность, что микрокод для Kaby Lake с номером ревизии 0x5d/0x5e (и более поздний) *может* исправить проблему, но это только предположение.

    Из-за непредсказуемой природы бага сложно проверить, какая программа может его вызвать, а какая нет, и при каких условиях он может проявиться. Поэтому отключить HyperThreading на всякий случай рекомендуется всем. Разработчикам Debian о баге сообщил Марк Шинвелл (Mark Shinwell), один из создателей набора инструментов Ocaml. Он сказал, что компилятор OCaml легко вызывает этот баг. Разработчики Ocaml внимательно исследовали проблему с января 2017 года, а первые глюки были замечены ещё во II кв. 2016 года, никто не мог понять, что происходит и в чём причина. Компилятор и приложение аварийно завершались со сбоем, программа вела себя некорректно, в том числе выдавала некорректную выдачу. Только теперь, когда Intel начала обновлять документацию к процессорам, ситуация прояснилась. Важно отметить, что код, который приводит к проявлению бага в процессоре, присутствовал в gcc-сгенерированном коде.
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 28
    • +13
      Непонятно, зачем называть ошибку (да еще и уже исправленную обновлением микрокода) «критической уязвимостью»?
      Уязвимостью этот баг станет только тогда, когда с его помощью научатся обходить какие-то защитные механизмы процессора\прошивки\ОС, а пока это просто баг, один из многих, в прошлый раз так пришлось TSX на Haswell отключить.
      • +7
        Советую также посмотреть презентацию с 32c3 (видео, слайды) — When hardware must «just work», там очень хорошо пояснено, почему баги в процессорах до сих пор регулярно находятся, и почему сделать процессор без единого бага — практически нереально.
        • +1

          Как я понял ошибка не исправлена. Интел недавно только предоставил код для разработчиков МП, а когда они выпустят новый биос и выпустят ли вообще никто не в курсе.

          • 0
            Кто мешает обновлять микрокод самостоятельно?
            • –1
              Цифровая подпись BIOS'а, например.
              • +1
                Что? А при чём здесь BIOS?
                • –1
                  В подавляющем большинстве случаев микрокод загружается именно оттуда.
                  • +1
                    Правда что ли? И как же тогда так получилось, что у меня прошлогодняя прошивка в матери
                    # dmidecode | grep Release\ Date
                    Release Date: 09/19/2016

                    Но при этом свежий микрокод?
                    # grep microcode /proc/cpuinfo | head -n1
                    microcode : 0xba

                    Может быть, обновлять микрокод умеет не только BIOS?
                    # dmesg | head -n1
                    [ 0.000000] microcode: microcode updated early to revision 0xba, date = 2017-04-09
                    • +1
                      В подавляющем большинстве случаев свежий микрокод загружается операционной системой, потому что BIOS либо древний, либо производитель мат. платы уже забил на обновления.

                      Таким образом, микрокод подгружается 2 раза: сначала более старый из BIOS, потом свежий из ОС.

                      Поэтому, пользователи получат микрокод как только обновят соответствующий пакет в Linux/прилетит обновление в Windows.

                      Вдобавок, есть даже отдельный драйвер производства компании VMWare, который создан специально для загрузки файла, содержащего микрокод (а сам файл с микрокодом свободно доступен на сайте Intel).
                  • +1
                    Это можно обойти. Например, у ASUS из подписанного CAP-файла (UEFI Capsule) легко извлечь непосредственно образ прошивки, в котором самостоятельно заменить микрокод (через MMTool) и прошить получившуюся прошивку из операционной системы с помощью Intel Flash Programming Tool.
                  • 0

                    Микрокод для Kaby Lake с исправлением не был публично доступен, выложили только для Skylake — по данным письма от 25 числа — https://lwn.net/Articles/726496/ "[WARNING] Intel Skylake/Kaby Lake processors: broken hyper-threading" — Henrique de Moraes Holschuh, 25 Jun 2017:


                    Users of systems with Intel Kaby Lake processors should immediately disable hyper-threading in the BIOS/UEFI configuration. Please consult your computer/motherboard's manual for instructions, or maybe contact your system vendor's support line.

                    The Kaby Lake microcode updates that fix this issue are currently only available to system vendors, so you will need a BIOS/UEFI update to get it. Contact your system vendor: if you are lucky, such a BIOS/UEFI update might already be available, or undergoing beta testing.

                    … Users of systems with Intel Skylake processors may have two choices:

                    If your processor model (listed in /proc/cpuinfo) is 78 or 94, and the stepping is 3, install the non-free "intel-microcode" package with base version 3.20170511.1, and reboot the system. THIS IS THE RECOMMENDED SOLUTION FOR THESE SYSTEMS, AS IT FIXES OTHER PROCESSOR ISSUES AS WELL.

                    В частности, дебиан собирает пакет микрокодов из https://downloadcenter.intel.com/search?keyword=linux+microcode, где сейчас самый свежий
                    Linux* Processor Microcode Data File; The microcode data file contains the latest Linux* microcode definitions for all Intel® Processors. Intel periodically releases these microcode updates.; Version 20170511; Date 11/4/2016.

                    • 0
                      Однако, он будет опубликован. И обновить его можно будет вне зависимости от желания производителя материнской платы выпускать новую версию прошивки.
                • +1
                  Как использовать эту ошибку? Да легко. Ищем хостера с серверами на базе соответствующих процессоров, покупаем у него самую дешёвую VPS, запускаем код, триггерящий уязвимость с очень высокой вероятностью, получаем DoS чужих VPS-ок, запущенных на этом же физическом хосте. Отсутствие публичного эксплойта никак не умаляет опасность уязвимости. Это именно что обход защитных механизмов процессора и ОС — код с минимальными привилегиями может вызвать сбои (пусть и случайные — для DoS этого достаточно) в других приложениях. Когда защитные механизмы процессора и ОС работают корректно такая ситуация невозможна.

                  Что касается исправления — пока официально доступно исправление только для Skylake. К тому же нередко информация о критических уязвимостях публикуется после официального выкатывания исправлений — чтобы юзеры побежали обновляться, потому что просто так обновляют микрокод далеко не все.
                • +1
                  А че так мало комментариев на сайте?
                  • +3
                    Во как. По началу я связывал вылеты gcc и зависания системы, при компиляции Android прошивок, с перегревом. Хотя, все датчики показывали не совсем уж критическую температуру. Затем, при очередном обновлении UEFI, забыл включить HT и проблема исчезла. Через какое-то время заметил выключенный HT и включил его. Проблемы вылезли, но не сразу, поэтому и не связал это с HT. Теперь всё стало понятно…
                    • 0
                      Эх. Выключение HT привело к +6 минут к сборке прошивки
                    • +2
                      Желание апгрейдить і5 на і7 сильно уменьшилось.
                      • +1
                        Проблема, на самом деле, очень специфическая, шансов столкнуться с ней немного. Говорю, как обладатель инженерной версии Skylake, для которой свежего микрокода нет (и не будет).

                        Вдобавок, ходят слухи, что следующие мейнстримовые i7 будут 6-ядерными (i5 станут тем, чем сейчас являются i7, а i3 получат 4 полноценных ядра), поэтому лучше подождать до осени, там видно будет.
                      • 0
                        Интел продолжает «радовать»: RdRand, SYSRET, теперь это. На этом фоне AMD выглядит всё более привлекательно…
                        • 0
                          Интел долго лидировал, может пора истории развернуться?
                          • 0

                            как будто в амд нет багов...

                            • 0
                              Да есть, наверное; но почему-то баги Интел на слуху, а баги AMD мне пришлось гуглить (коих оказалось меньше и не таких серьезных).
                              • 0
                                А еще Linux неуязвим для вирусов.
                                Популярность Intel и AMD — 4 к одному (в серверном сегменте еще больше, скорее всего). Логично подумать, что и подобных багов обнаруживаться будет больше у Intel. Тем более, что проверить такой баг довольно тяжело и многие его списывают на программную ошибку, к примеру
                            • +2

                              Спешу вас огорчить. В любом процессоре есть errata длиною в километр.


                              Как пример,
                              https://community.amd.com/thread/215773
                              tl;dr Segmentation Fault при компилляции на процессорах Ryzen. Пока ничего не понятно почему это происходит, но сага длится несколько месяцев уже.
                              Помимо этого есть немалого других проблем уже подтвержденных AMD.
                              Интел просто популярней поэтому чаще слышно о его проблемах в новостях.

                            • 0
                              i7 6770hq, были баги с зависаниями, мерцанием экрана в некоторых играх и просто спонтанные ошибки. После отключения по крайней мере быстровоспроизводимые баги исчезли.
                              • 0
                                Интересно, скоро ли мы дойдём до такой точки в развитии процессоров, что мы просто НЕ сможем совершенствовать их путём всё большего усложнения архитектуры и производственного процесса (ибо у нас будет будет вылезать слишком много ошибок и брака)?
                                • +1
                                  Почти все процессоры, кроме самих дорогих уже являются продуктом отбраковки. Intel производит только три процессора: Atom, Core, Xeon. Вся вариация линейки это процессоры которые по тем или иным причинам не прошли тесты на какие-то фичи. Тут главное грамотно выявлять ошибки и иметь возможность их достаточно хорошо изолировано отключать, создавая младшие модели процессоров.
                                  • 0

                                    Была статья, по-моему, на eetimes с интервью главных экспертов. Таки да, на текущих технологиях примерно года через три-четыре это наступит, если я правильно помню. Но с другой стороны начнётся использование других материалов, производственных процессов, и еще много чего (например наблюдается тенденция возращения к "вертикальным" компаниям, то-есть производящих все начиная от процессоров до программного обеспечения. Квантовые компьютеры также многообещающая отрасль). Возможно будет огромный скачок в середине 20-ых годов.

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.