Failles processeurs Meltdown & Spectre : un compromis qui a mal tourné

Il faudra bien se faire une raison : nous devrons vivre sans doute quelques années avec les deux failles découvertes par différentes équipes de chercheurs. Ce n’est qu’à partir de 2019 qu’une nouvelle génération de processeurs apportera un remède définitif à Meltdown et Spectre. Il est temps de faire mieux connaissance avec ces défauts de conception.

L’informatique moderne se construit autour de deux piliers : la performance et la sécurité. Malheureusement, ces deux objectifs sont parfois contradictoires : la sécurité nécessite des contrôles permanents que la performance exècre. Parfois, les ingénieurs réussissent à allier les deux sans trop de souci ; parfois, les exigences sont si incompatibles que des compromis doivent être trouvés, au prix d’un certain risque, conscient ou non. Meltdown et Spectre, ces deux failles présentes dans toutes les itérations récentes des processeurs Intel – et, pour Spectre, également AMD et ARM – sont les rejetons d’un compromis qui a mal tourné.

Depuis que la course aux mégaHertz s’est terminée en cul-de-sac, les fondeurs ont tout misé sur l’exécution parallèle : les processeurs actuels renferment plusieurs cœurs qui eux-mêmes exécutent plusieurs instructions simultanément (architecture « superscalaire »).

Les ressources d’exécution du processeur (unité arithmétique, unité d’accès mémoire, etc.) sont mutualisées. Chaque instruction assembleur est décodée, puis décomposée en micro-instructions (µOP). Celles-ci s’exécutent dès que les ressources qu’elles nécessitent deviennent disponibles, pourvu qu’elles ne dépendent pas d’une autre micro-instruction en cours. Certaines instructions s’exécutent donc avant que d’autres, pourtant antérieures, ne soient terminées. Pensez à la Poste : si tous les gens attendent pour une opération bancaire et que vous venez pour affranchir une lettre, vous serez sorti bien avant le dernier d’entre eux. Lorsque toutes les micro-instructions correspondant à une instruction ont fini de s’exécuter, l’instruction est mise en attente. Elle est ensuite « retirée » du pipeline, dans l’ordre chronologique d’exécution attendu : sa légitimité est vérifiée et, le cas échéant, ses résultats sont entérinés.