1

Я пытаюсь настроить CI-тесты на технологию потока управления, чтобы гарантировать, что наш встроенный ASM работает как ожидается с теневыми стеками. Эта функция называется Control-flow Enforcement Technology (CET) на процессорах Intel, и GCC предлагает варианты ее включения через -fcf-protection=full , -mcet и friends.

Я выполнил быстрый тест с использованием Fedora 26/GCC 7.2 на 7-м поколении Core i5. Это привело к провалу, что не было удивительно:

$ CXXFLAGS="-DNDEBUG -g2 -O3 -fcf-protection=full -mcet" make
g++: error: unrecognized command line option ‘-fcf-protection=full’; did you mean ‘-fstack-protector-all’?
g++: error: unrecognized command line option ‘-mcet’; did you mean ‘-maes’?
make: *** [GNUmakefile:1057: cryptlib.o] Error 1

Я посетил Что означают флаги в /proc /cpuinfo? в Unix и Linux Stack Exchange я не видел флагов cet или ibt .

Мой первый вопрос: какие процессоры Intel поддерживают CET?

Мой второй вопрос: требует ли CET поддержки ядра? Если так, то какие ядра Linux поддерживают это?

1 ответ1

2

Мой первый вопрос: какие процессоры Intel поддерживают CET?

По состоянию на 20 октября 2017 года процессоры Intel, которые его поддерживают, не продаются.

Intel официально не прокомментировала, когда CET будет добавлена в новые процессоры для защиты целостности потока управления, но, учитывая сроки работы GCC, мы надеемся, что мы увидим это на месте для Cannonlake или наихудшего случая Ice Lake.

Технология контроля потока начинается в GCC 8

Я выполнил быстрый тест с использованием Fedora 26/GCC 7.2 на 7-м поколении Core i5. Это привело к провалу, что не было удивительно:

Вам необходимо использовать версию GCC, которая поддерживает эту функцию, чтобы использовать ее в своей программе. Это означает, что вы захотите использовать GCC 8.1 после его выпуска. Маловероятно, что потребуется поддержка ядра, но, учитывая, что в настоящее время на рынке нет поддерживаемых процессоров, почти невозможно предсказать, какими именно будут требования.

Тем не менее, я не вижу каких-либо указаний на поддержку ядра, поскольку эти инструкции, которые будет использовать GCC, не зависят от платформы. Я не был бы шокирован, если бы ядра добавили функции, которые использовали эти инструкции в своих API в будущем.

Следующее описание представляется актуальным:

Таким образом, Intel с CET создает теневой стек, который программист, обычная система, не может контролировать. И единственные данные, которые передаются и извлекаются, это те, которые подразумевают использование стека

Стив Гибсон, Эпизод 565

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .