Altro giro, altro bug (per Intel)!

L’epopea di Intel e dei bug hardware dei suoi processori non cenna a diminuire. Dopo l’annuncio di altre varianti di Spectre e Meltdown, con relative patch in arrivo, Cyberus Technology annuncia la scoperta di un nuovo buco, relativo al lazy FPU state switching (cambiamento di stato della FPU pigro).

Di cosa si tratta? Abbiamo già accennato ai meccanismi di Meltdown e Spectre, per cui alcune tecniche di miglioramento delle prestazioni (branch prediction) permettono l’accesso non autorizzato a dati memorizzati nella CPU; anche questa volta siamo di fronte ad un caso simile.

Le nostre CPU eseguono un solo programma alla volta, ma possono sospendere l’esecuzione di un programma ed eseguirne un altro: fatto spesso (e con sufficiente velocità), questo crea l’illusione del multitasking, ovvero l’esecuzione contemporanea di più programmi. La CPU usa tutta una serie di registri per sapere a che punto del programma sia arrivata e su che dati stesse lavorando: il cambio avviene salvando la situazione di questi registri e caricando la situazione del programma lasciato in sospeso da riprendere.
Anche in questo caso lo switch di programma può essere piuttosto oneroso, quindi una tecnica per migliorare le prestazioni è evitare l’effettivo cambiamento fino a quando non sarà necessario, lasciando quindi accessibili dei dati che non appartengono al programma in esecuzione in quel momento.

Questa particolare falla non riguarda tutta la CPU, ma la FPU (Floating-Point Unit), ovvero quel chip che si occupa esclusivamente dei calcoli che riguardano numeri con la virgola (le operazioni fatte con numeri interi sono più semplici e gestite direttamente dalla CPU). Ai tempi di 286 e 386 si parlava di coprocessore, ma l’utilità (e il costo irrisorio aggiuntivo) hanno ormai fatto integrare questo componente in tutti i processori moderni. Il dettaglio sembra piccolo, e che limiti i danni, peccato che moltissimi calcoli siano demandati all’FPU, compreso criptazioni e codifiche/decodifiche: danni limitati proprio alla parte più sensibile.

Al momento l’attacco sembra specifico delle CPU Intel, ma non è ancora dato sapere esattamente quali modelli né quanto sia difficile attuarlo. Tutto perduto, quindi?
No, perché da qualche anno i processori dispongono di una nuova istruzione (XSAVEOPT) per memorizzare lo stato dei registri che non si comporta pigramente, e i kernel moderni usano questa funzionalità di default: vale per RHEL/CentOS 7, Ubuntu 16.04, in genere dal kernel 4.9. Perfino Windows 10 è già coperto.
Per chi invece usasse un kernel più antico, dal kernel 3.7 è disponibile l’opzione al boot “eagerfpu=on”, che disattiva l’ottimizzazione problematica.

Per questo giro, forse, possiamo stare tranquilli.

Ho coltivato la mia passione per l'informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.

Tags: ,