Спекулятивное исполнение

Вот как вы дума­е­те, совре­мен­ные про­цес­со­ры, встре­тив в коде услов­ный пере­ход типа if () {} else {}, какую ветвь кода выпол­ня­ют?

Пра­виль­ный ответ: обе.

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

Толь­ко вот с выбра­сы­ва­ни­ем есть… эффек­ты. Кото­ры­ми мож­но зло­упо­тре­бить. Имен­но отсю­да рас­тут ноги туе­вой хучи экс­плой­тов типа Spectre, Meltdown, и про­чих радо­стей. Теперь с эффек­та­ми засве­ти­лись про­цес­со­ры AMD.

Я пло­хо пони­маю кон­кре­ти­ку, но каким-то обра­зом зло­умыш­лен­ни­ки могут заста­вить цен­траль­ный про­цес­сор счи­тать, что коман­да XOR явля­ет­ся рекур­сив­ным вызо­вом. Далее, как водит­ся, идёт пере­пол­не­ние буфе­ра, и воз­врат сте­ка на про­из­воль­ный адрес, кото­рый любез­но под­со­вы­ва­ет ему хакер. Таким обра­зом могут быть воз­вра­ще­ны при­ват­ные дан­ные из дру­го­го непри­ви­ле­ги­ро­ван­но­го про­цес­са.

https://www.bleepingcomputer.com/news/security/new-inception-attack-leaks-sensitive-data-from-all-amd-zen-cpus/

Когда же всё это почи­нят? Да нико­гда. Уби­ра­ние спе­ку­ля­тив­но­го испол­не­ния сто­ит огром­но­го паде­ния в про­из­во­ди­тель­но­сти. Поэто­му оно с нами будет как мини­мум до тех пор, пока память типа SRAM не будет сто­ить как обыч­ная опе­ра­тив­ка RAM.