La Meltdown attack FAQ indique que KPTI est le correctif pour linux. Comment vérifier si KPTI fonctionne/est activé?
Les choses qui indiquent l'état de KPTI:
Dans les noyaux standard, les chaînes Kernel/User page tables isolation: enabled
ou Kernel/User page tables isolation: force enabled on command line
dans la sortie dmesg
signifie que le noyau effectue l'isolement de la table des pages du noyau. Ce dernier message signifie en outre que le noyau pense que l'isolation de la table des pages n'est pas requise pour ce processeur.
Dans certains noyaux corrigés par les fournisseurs (principalement RedHat et dérivés): une valeur non nulle dans /sys/kernel/debug/x86/pti_enabled
. Le absence de ce fichier ne signifie cependant rien: le noyau standard ne le fournit pas.
Dans le noyau 4.14.18 ou plus récent et les versions correspondantes des noyaux LTS, le contenu de /sys/devices/system/cpu/vulnerabilities/meltdown
: une ligne commençant par Mitigation:
indique qu'une atténuation (KPTI, microcode ou autre) est en place, une ligne commençant par Not affected
indique que le CPU n'est pas affecté par le problème, et une ligne commençant par Vulnerable
indique que le CPU est considéré comme vulnérable, mais aucune atténuation ou une atténuation suffisante n'est en place.
Choses qui n'indiquent pas l'état de KPTI:
Version du noyau. Le noyau 4.14.11 et plus récent, et les versions correspondantes des noyaux 4.1, 4,4 et 4.9 LTS sont capable de KPTI, mais ils peuvent être compilés avec celui-ci désactivé, et il peut être désactivé à temps de démarrage. De plus, les versions antérieures à celles-ci ne sont pas automatiquement menacées: certaines distributions ont rétroporté les correctifs KPTI vers des noyaux plus anciens.
bugs : cpu_insecure
dans /proc/cpuinfo
. La présence de ceci indique que if le noyau est compilé pour l'isolement de la table des pages, et if l'isolement de la table des pages n'a pas été désactivé au démarrage ou à l'exécution, alors page -l'isolement de la table sera utilisé. De plus, cela pas indique qu'un CPU est vulnérable à l'attaque de Meltdown: le noyau 4.14.11 le définit pour tous les CPU x86, tandis que le noyau 4.14.12 le définit pour tous les CPU non AMD, même ceux comme le Pentium MMX ou le "Bonnell" Atom CPU qui ne sont pas vulnérables.
CONFIG_PAGE_TABLE_ISOLATION=y
dans la configuration du noyau. Cela indique seulement que le noyau est capable d'isoler le noyau page-table. KPTI peut être désactivé au démarrage à partir de la ligne de commande du noyau via nopti
ou pti=off
options. Sur certains systèmes, il peut être désactivé lors de l'exécution en écrivant 0
à /sys/kernel/debug/x86/pti_enabled
.
Le noyau Linux enregistre l'état KPTI au démarrage, donc l'exécution de la commande suivante afficherait l'état sur les noyaux corrigés. S'il n'imprime rien alors, KPTI est désactivé.
dmesg -wH | grep 'Kernel/User page tables isolation'
Linux Kernel 4.15rc6 a activé KPTI (Kernel page-table isolation) et il a été porté en arrière sur Linux Kernel 4.14.11 , 4.9.74, 4.4.109, 3.16.52 et 3.2.97 .
Donc, si vous exécutez l'une de ces versions, KPTI est en place. La plupart des distributions (exécutant n'importe quelle version du noyau Linux) pousseront une mise à jour du noyau Linux dans un jour ou deux pour corriger Meltdown et spectre.
Remarque: ajoutez le paramètre pti=off
au GRUB afin de désactiver le KPTI. Pour info: https://askubuntu.com/questions/19486/how-do-i-add-a- kernel-boot-parameter
Sur un noyau pris en charge:
dmesg | grep 'Isolement des tables de pages noyau/utilisateur'
entraînera soit activé ou désactivé.
S'il n'y a pas de résultat, le noyau ne prend pas en charge KPTI.
Vérifiez la sortie dmesg, comme dmesg | grep isolation
, pour déterminer s'il est activé pour votre machine en cours d'exécution.
Quelques détails supplémentaires sont mentionnés ici: https://lwn.net/Articles/741878/
zcat /proc/config.gz | grep CONFIG_PAGE_TABLE_ISOLATION=y
Recherchez une ligne contenant Kernel/User page tables isolation
dans dmesg
sortie. Mais comme le début du tampon d'anneau du noyau peut ne plus être là, une autre possibilité est de rechercher la même chaîne dans /var/log/kern.log
(ou l'une de ses versions pivotées, ou un autre fichier journal).
Notez également que les invités Xen peuvent ne pas avoir une telle ligne. Par exemple, c'est le silent_disable
cas dans Arch/x86/mm/kaiser.c
du noyau Debian/stretch (4.9.65-3 + deb9u2):
void __init kaiser_check_boottime_disable(void)
{
[...]
if (boot_cpu_has(X86_FEATURE_XENPV))
goto silent_disable;
[...]
disable:
pr_info("disabled\n");
silent_disable:
kaiser_enabled = 0;
setup_clear_cpu_cap(X86_FEATURE_KAISER);
}
Je suis également préoccupé par l'impact sur les performances du correctif de fusion. Nous exécutons la majeure partie de la charge de travail sur Amazon Linux sur EC2.
J'ai remarqué que la dernière mise à jour du noyau (build 03 janvier 2018) - 4.9.70-25.242
inclut tous les correctifs de fusion en amont (vérifiez rpm -q --changelog kernel
).
Par défaut, le noyau Amazon Linux 4.9.70-25.242 et versions ultérieures active l'isolement des tables de pages (CONFIG_PAGE_TABLE_ISOLATION=y
) donc je pense que tant que ce drapeau est y alors KPTI est activé, malheureusement. Je n'ai pas fait de comparaison de différences de performances (cela devrait être perceptible).