Для достижения максимально возможной производительности ЦПУ необходимо выполнять множество операций параллельно.
Например, при доступе к чему-либо в памяти ЦПУ может потребоваться извлечь данные и выполнить параллельные проверки разрешений.(а затем вернуть все обратно в предыдущее состояние, если проверка разрешений не удалась);потому что это быстрее (для «вероятного случая», когда проверки разрешений проходят), чем сначала выполнять проверки разрешений, а затем выполнять выборку данных после прохождения проверок разрешений.
Конечно, если это означает, что выборка вызывает что-тобыть введенным в кэш ЦП до проверки прав доступатогда это "хорошо", потому что кеш на самом деле не должен быть частью архитектурно видимого состояния в любом случае.Другими словами, если проверка разрешений не удалась, вам не нужно возвращать кеш обратно в предыдущее состояние (что будет трудно / дорого), потому что программное обеспечение «не может» зависеть от точного содержимого кеша.
Все это кажется вполне разумным, не так ли?
Однако ...
Если программное обеспечение использует умозрительное выполнение, чтобы обмануть процессор для извлечения некоторых данных, где адресот того, какие данные выбираются, зависит от значения в пространстве ядра, тогда это может произойти до того, как проверки разрешений будут завершены, и тогда все (кроме кэша) будет возвращено обратно;и если программное обеспечение использует синхронизацию для определения того, какой адрес был извлечен в кэш, то программное обеспечение может использовать эту информацию для определения значения в пространстве ядра, от которого зависит адрес.
По существу;Корпорация Intel приняла проектные решения для повышения производительности, которые в то время казались совершенно разумными.Только с оглядкой на прошлое мы можем увидеть недостаток безопасности.