Что на самом деле показывает раздел «ошибки» в / proc / cpuinfo?

23

На Debian Stretch и тестирующей / Buster системе с текущим ядром и установленным микрокодом я все еще вижу ошибки и призраки в списке ошибок /proc/cpuinfo.

Однако запуск spectre-meltdown-checkerшоу не уязвим.

Поэтому мне интересно, что /proc/cpuinfoпоказывает. Являются ли они только уязвимостями для этого процессора, и будут ли они всегда присутствовать в списке, несмотря на наличие исправленной системы?

hurrbert
источник

Ответы:

22

Назначение поля «ошибки» /proc/cpuinfoописано в сообщении о коммите, в котором оно было представлено :

x86/cpufeature: Добавить флаги ошибок /proc/cpuinfo

Сбросьте флаги, которые обозначают, что мы обнаружили и / или применили обходные пути ошибки к процессору, на котором мы выполняем, аналогично флагам возможностей.

Преимущество заключается в том, что они не накапливаются со временем, как функции процессора.

Ранее аппаратные ошибки, обнаруженные ядром, были указаны как отдельные функции ( например, печально известная ошибка F00F, которая имеет собственную f00f_bugзапись в /proc/cpuinfo32-разрядных системах x86). Введена запись «ошибок», чтобы удерживать их в одной функции, идущей вперед, в том же стиле, что и флаги процессора x86 .

Что касается того, что записи означают на практике, как вы можете видеть в сообщении, все, что гарантировано, это то, что ядро обнаружило аппаратную ошибку. Вам нужно искать в другом месте (загрузочные сообщения или конкретные /procзаписи или /sysзаписи, такие как файлы в /sys/devices/system/cpu/vulnerabilities/), чтобы определить, решены ли проблемы.

Полезность записей об ошибках ограничена двумя способами. Во-первых, настоящие негативы нельзя отличить от неизвестных: если в поле не указано «cpu_meltdown», вы не можете знать (только из поля), означает ли это, что ядро ​​не знает о Meltdown, или что ваш процессор не подвержен влиянию Meltdown. Во-вторых, обнаружение может быть слишком упрощенным; из-за осторожности он может сообщить, что ваш процессор уязвим, когда это не так. Поскольку «обнаружение» основано на таблицах, его точность зависит от того, какую версию ядра вы используете.

В случае с ошибками Meltdown и Spectre процесс обнаружения, который передает значения, /proc/cpuinfo работает на x86 следующим образом :

Стивен Китт
источник
2
В случае призрака и обвала они даже не обнаруживаются, а просто предполагаются . У меня есть x86 в порядке, на который также не влияют, но ядро ​​просто сообщает, что это так или иначе из-за жестко закодированного правила, которое в основном гласит: «Любой процессор Intel старше X без примененного исправления микрокода уязвим для распада».
R ..
2
@R .. Ваш процессор включен в таблицы порядка ядра? (Посмотрите на «cpu_no_speculation» здесь , чтобы увидеть последние таблицы). Это действительно одна из проблем с «глюки» WRT входа. Meltdown, Spectre и др., Его точность действительно зависит от того, насколько свежо ваше ядро, поскольку их «обнаружение» основано на таблицах.
Стивен Китт
Нет, это «Центертон Боннелл», и его там нет. Я посмотрю о представлении патча.
R ..
Кто-нибудь знает, если это все еще правильно, когда обновления микрокода были применены во время загрузки, но после загрузки ядра?
Бахсау
12

Уязвимости Meltdown / Spectre связаны с дизайном / архитектурой набора микросхем ЦП, и, если не покупать новое оборудование в будущем, исправления являются хорошей иллюзией безопасности в долгосрочной перспективе . Со временем могут появиться новые методы использования недостатков, которые могут обойти текущие исправления.

Короче говоря, текущие программные исправления / микрокоды смягчают проблемы, связанные с известными методами эксплойтов семейства Spectre / Meltdown, но не решают проблем проектирования базовых процессоров, которые в первую очередь разрешают их. Пострадавшие (несколько поколений) процессоров не перестали быть уязвимыми в долгосрочной перспективе (и, скорее всего, никогда не будут).

Тем не менее, как правильно утверждает @Gilles, наличие этого предупреждения не означает, что текущие известные эксплойты будут использовать методы Spectre / Meltdown; они не будут работать, если патчи установлены.

В случае, упомянутом в вопросе, ядро ​​проверяет только те модели процессора, о которых известно, что на них влияет Specter / Meltdown (пока все процессоры x86, если речь идет только о x86), и, следовательно, они cpu-insecureвсе еще перечислены в разделе об ошибках. / строка в /proc/cpuinfo.

Иди проверь /proc/cpuinfo. Он будет содержать cpu_insecure, если у вашего ядра есть патч KPTI

Я обнаружил, что патч KPTI имеет этот кусок кода:

   /* Assume for now that ALL x86 CPUs are insecure */
   setup_force_cpu_bug(X86_BUG_CPU_INSECURE);

И после обновления ядра вы получаете:

bugs      : cpu_insecure

PS. Уже был раунд обновлений для нового метода для использования "ошибок" Spectre / Meltdown. Вероятно, не в последний раз.

Руи Ф Рибейро
источник
2
Например, если вы можете отложить покупку hw на некоторое время, подождите до нового поколения процессоров. Мой хрустальный шар сказал мне, что у нас будет много подержанных серверов, продающих арахис в среднесрочной перспективе.
Руи Ф Рибейро
Ошибки процессора перечислены в списке, /proc/cpuinfoдаже если они полностью устранены программным исправлением. Их присутствие не означает, что ваша система уязвима для этой конкретной ошибки.
Жиль "ТАК - перестань быть злым"
@ Жиль, конечно, вы не сможете применить известные эксплойты. Однако у нас уже был ряд эксплойтов, связанных с патчами 1-го поколения, и я осмелюсь сказать, что существует много коммерческих интересов, чтобы заставить критиков замолчать, что это фундаментальный недостаток дизайна, который приведет к серьезной переработке ЦП.
Руи Ф Рибейро
1
Это верно для эксплойтов типа Спектр / Расплавление, они являются фундаментальными проблемами проектирования, которые будут продолжать давать. Но вы написали, что это верно для bugsлинейных шоу, и это просто неправильно. Большинство ошибок проектирования ЦП имеют полный программный обход, который стоит лишь небольшой производительности. Если ядро ​​применяет обходной путь, то ошибка безвредна.
Жиль "ТАК - перестань быть злым"
1
@Rui О, я думаю, что я не выразил себя достаточно ясно - я имел в виду, что статья не ответила на вопрос, который задал ее собственное название, не то, что она не ответила на этот вопрос ;-). (Как и в статье, заголовок статьи «Как ошибка в« Призраке »оставалась секретной в течение семи месяцев», но статья не объясняет, как это происходит с ИМО.)
Стивен Китт,