A mio parere, gli attacchi Meltdown e Spectre sfruttano entrambi il fatto che alcuni processori moderni, quando vengono dati qualcosa del tipo:
if (x < arr1[y])
z = arr2[arr3[x]*256];
a volte può recuperare il valore di arr2[arr3[x] * 256]
prima che abbiano determinato se x
è inferiore a arr1[y]
, e può farlo senza considerare se il codice ha un'autorizzazione adeguata per accedere a arr3[x]
. La parte in corsivo è il sine qua non della vulnerabilità: se il processore recuperava solo arr2[arr3[x] * 256]
nei casi in cui l'accesso a arr3[x]
era ammissibile, sarebbe impossibile sfruttare un arr2[___ * 256]
che utilizza valori di arr3[x]
caricati illegittimamente perché non ce ne sarebbero.
Ha senso che anche se arr3[x]
non è valido, il processore non può intercettare a meno che o fino a quando non determini che x
è inferiore a arr1[y]
. Quello che non riesco a capire è perché un recupero speculativo da un indirizzo non valido non dovrebbe indurre la CPU ad abbandonare il percorso di esecuzione speculativo corrente? Penserei che in quasi tutti gli scenari realistici accadrebbe una delle due cose:
-
La previsione del ramo che ha portato all'esecuzione speculativa risulta errata, nel qual caso qualsiasi lavoro che potrebbe essere eseguito con il valore recuperato in modo speculativo dovrà essere scartato.
-
La previsione del ramo che ha portato all'esecuzione speculativa risulta essere corretta, nel qual caso l'esecuzione dovrebbe intercettare l'accesso non valido, e il lavoro che potrebbe essere fatto con il valore recuperato in modo speculativo (prima di eseguire la trappola) deve essere scartato.
Esiste uno scenario realistico in cui il lavoro speculativo che segue un recupero speculativo da un indirizzo illegittimo potrebbe rivelarsi utile? In caso negativo, quale vantaggio c'è per consentire all'esecuzione speculativa di continuare oltre tali recuperi? Se un recupero non valido farà abbandonare la CPU alla linea corrente di esecuzione speculativa, ciò eviterebbe la necessità di tenere traccia delle trappole in sospeso speculative.