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.