Service de noyau cpu_spéculation_barrière
Objectif
Fournit une protection contre les attaques à canal latéral spéculatives.
Syntaxe
#include <sys/processor.h>
void cpu_speculation_barrier ( void )
Descriptif
Le service de noyau
cpu_speculation_barrier fournit des extensions de noyau avec une atténuation dépendante du modèle de processeur contre les vulnérabilités d'exécution spéculative connues. Le service de noyau cpu_speculation_barrier peut être utilisé pour se protéger contre les attaques par canal latéral dans l'environnement de noyau. Les extensions de noyau doivent être soigneusement vérifiées lorsque le service de noyau cpu_speculation_barrier est utilisé.Remarque: les performances du noyau peuvent diminuer lorsque le service de noyau
cpu_speculation_barrier est utilisé.Le service de noyau cpu_speculation_barrier doit être appelé avant l'accès au stockage à l'aide d'adresses calculées à partir d'une source non sécurisée. Par conséquent, seules les extensions de noyau qui référencent des données en mode utilisateur directement sans utiliser les services d'accès aux domaines de privilèges croisés, tels que le service copyin , peuvent utiliser le service de noyau cpu_speculation_barrier .
Environnement d'exécution
Le service de noyau cpu_speculation_barrier peut être appelé à partir de l' environnement de processus ou de l' environnement d'interruption.
Exemple
L'exemple suivant illustre un gestionnaire de pilote de périphérique
ioctl qui fait directement référence à des données en mode utilisateur:int
dd_ioctl(dev_t devno, int cmd, void *arg, ulong devflag, chan_t chan, int ext)
{
int index;
char val;
vector_t *uvec = NULL;
extern int max_kdata_index;
extern char kdata[];
if (cmd == 0xC1C2) {
/* Select kernel data from user input */
uvec = (vector_t *)arg;
index = uvec->index;
if (index < max_kdata_index) {
cpu_speculation_barrier();
val = kdata[index];
uvec->data[val]++;
}
}
}
Valeurs renvoyées
Le service de noyau cpu_speculation_barrier ne renvoie aucune valeur.