cpu_context_Barrier et cpu_spéculation_Barrier Sous-routines

Objectif

Fournit une protection contre les attaques par canaux parallèles d'exécution spéculative.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <sys/processor.h>
void cpu_context_barrier (int value)
void cpu_speculation_barrier (void)

Descriptif

Les sous-routines cpu_context_Barrier et cpu_spéculation_Barrier fournissent des applications avec une atténuation dépendante du modèle de processeur contre les vulnérabilités d'exécution spéculative connues. Ces sous-routines peuvent être utilisées par les applications 32 bits et 64 bits pour protéger les applications contre l'accès au stockage dépendant des données et pour isoler les segments sécurisés et non sécurisés d'une application.
Remarque: les performances de l'application peuvent diminuer lorsque la sous-routine cpu_context_Barrier ou cpu_spéculation_Barrier est utilisée.

La sous-routine cpu_context_Barrier doit être appelée à partir du domaine sécurisé et doit être exécutée à chaque transition entre le domaine sécurisé et le domaine non sécurisé. Cette sous-routine accepte un paramètre unique qui spécifie la méthode dans laquelle la sous-routine est utilisée. Alternativement, une variation complète de la sous-routine du noyau barrière peut être utilisée pour les scénarios où il est difficile de distinguer la méthode dans laquelle la sous-routine doit être utilisée.

La sous-routine cpu_spéculation_Barrier doit être appelée à partir du domaine sécurisé avant d'accéder au stockage à l'aide d'adresses calculées à partir d'une source non sécurisée.

Paramètres

Article Descriptif
value Indique la méthode dans laquelle la sous-routine de barrière est appelée.

Valeurs de barrière de contexte d'UC

Article Descriptif
CCB_ENTREE Spécifiez cette valeur lors de la transition vers un domaine de contexte sécurisé.
CCB_EXIT Spécifiez cette valeur lors de la transition vers un domaine de contexte sécurisé.
CCB_TOUT Spécifiez cette valeur lors de la transition vers un domaine de contexte sécurisé ou lors de la transition vers un domaine de contexte sécurisé.

Exemple

L'exemple suivant montre comment le domaine sécurisé d'une application appelle un domaine non sécurisé:

int                index;
char               val,
                   udata[];
extern int         max_tdata_index;
extern char        tdata[];

/* Fetch index from untrusted user */
cpu_context_barrier(CCB_EXIT);
index = get_index_from_user(...);
cpu_context_barrier(CCB_ENTRY);

/* Select trusted data from user input */
if (index < max_tdata_index) {
        cpu_speculation_barrier();
        val = tdata[index];
        udata[val]++;
}