Использование clflush для атаки Spectre и спекулятивного выполнения - PullRequest
0 голосов
/ 23 октября 2019

При атаке призрака paper на стр. 17 в строке 49 присутствует следующее утверждение:

_mm_clflush(&array1_size);

Позже вызывается функция жертвы:

void victim_function(size_t x) {
    if (x < array1_size) {
        temp &= array2[array1[x] * 512];
    }
}

Из статьи я понимаю, что из-за оператора flush процессор будет пытаться спекулировать и выполнять оператор temp &= array2[array1[x] * 512]; (на основе обучения), в то время как он оценивает результат условия if.

Myвопрос заключается в том, что если я прокомментирую оператор _mm_clflush(&array1_size) и удостоверимся, что array1_size находится в кеше, ЦП все еще будет спекулировать и выполнять temp &= array2[array1[x] * 512];, или ЦП определит, что переменная array1_size находится в кеше, иоценит условие if и только на основании его результата решит, что делать дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...