Reading Time: 5 minutes

Linux Kernel 4.15 è stato rilasciato il 28 gennaio 2018, dopo un lungo ciclo di sviluppo, tanto da arrivare alla RC9, cosa che non succedeva dal 2011.

Questa versione è la prima che contiene specifiche ottimizzazioni e soluzioni specifiche per Meltdown e Spectre issues (benché anche alcuni kernel precedenti avessero alcune protezioni).

Notare che in realtà i problemi sono tre problemi distinti: Meltdown è uno, ma poi ci sono due varianti di Spectre (note come v1 e v2). Il Kernel 4.15 al momento manca ancora mancano ancora dei fix per ARM e per la variante 1 di Spectre!

Per Meltdown la patch (per processori Intel) utilizza una funzionalità chiamata Page Table Isolation (PTI) che previene di utilizzare la Speculative Execution. Per chi non volesse attivarla (o per chi volesse testare l’impatto sulle prestazioni), è possibile disattivarla con l’opzione del kernel pti=off da aggiungere al boot loader .

Per Spectre v2 la patch (disponibile sia per processori Intel che AMD) è basata una modalità chiamata “retpoline mechanism” che richiede l’uso di un compilatore (GCC) compatibile. Anche in questo caso è possibile disattivare la protezione con il parametro del kernel spectre_v2=off sempre da aggiungere alla configurazione del boot loader.

PEr Spectre v1 al momento non c’è una soluzione, ma è anche vero che è una vurnerabilità difficile da utilizzare.

La parte interessante viene dalle prestazioni. Greg Kroah-Hartman, responsabile del branch stable del kernel, relativamente alla release 4.15 del kernel (la prima completamente patchata per i due bug), è però una situazione un pochino meno pessima di quanto ci si aspettasse:

From an email thread forwarded to me about one Linux user benchmarking recent kernel versions on a specific network-heavy load:

“4.15 is 7-9% faster than 4.11”
“Turning kpti on makes 4.15 1-2% slower than 4.11”

So, overall, we are right back where we started from. Which makes me feel good, the recent Meltdown changes turn out to not really be much of a problem overall.

Quindi il kernel 4.15 sarebbe “più veloce del 7-9% rispetto al 4.11, ma con la funzione di kpti (la più onerosa in termini di prestazioni), il kernel 4.15 perde circa 1-2% rispetto al 4.11, senza protezioni. Quindi una perdita minima, rispetto alle stime iniziali del 20-30% di calo. Ma va ricordato che MOLTO dipende dal tipo di workload.

Anceh Michael Larabell, principale autore e benchmarker del famoso sito Phoronix, in alcuni test recenti sui kernel dal 4.0 al 4.15 ha decreato quanto segue:

There are some slowdowns when using the Linux 4.15 kernel … at least in several of the real-world benchmarks, the performance out of Linux 4.15 is fortunately not at the lowest levels we’ve seen with benchmarking these kernel releases of the past three years

Questo è però vero solo con il kernel 4.15… se avere un kernel vecchio (3.10.y, 4.4.y, o 4.9.y) il calo di prestazioni (con le patch di sicurezza) c’è ed è rilevante!

Quindi come si può utilizzare il nuovo kernel visto che difficilmente verrà incluso in distribuzioni già esistenti (che adottano la strategia dei back-port di patch su versioni precedenti)?

Per fortuna esiste un ottimo blog post con suggerimenti di come installare questo kernel su distribuzioni RPM o DEB based, usando pacchetti già pronti!

Per distribuzioni CentOS (o RHEL) 6 o 7 è possibile utilizzare il repository ELRepo ed installare il nuovo kernel direttamente da lì

Il primo passo è importare la chiave digitale per la verifica dei pacchetti del nuovo repository:

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

A questo punto è possibile aggiungere il repository nuovo.

Per CentOS 7 / RHEL 7 / Scientific Linux 7:

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

Per CentOS 6 / RHEL 6 / Scientific Linux 6:

# rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

Il repository va poi abilitato:

# yum install yum-plugin-fastestmirror

Alla fine è possibile installare il Linux kernel 4.15 con questo comando:

# yum --enablerepo=elrepo-kernel install kernel-ml

Notare che il pacchetto del kernel si chiama kernel-ml e che quello precedente rimane. Anzi, in grub il boot predefinito è ancora con il kernel della distribuzione. Verificate quindi la configurazione di grub per rendere quello nuovo il kernel di default. A questo punto basta riavviare Linux per attivare il nuovo kernel. Le patch sono già attive di default.

Per verificare lo stato della protezione da Meltdown e Spectre è possibile utilizzare questo script scritto in bash: spectre-meltdown-checker disponibile su GitHub. Si può scaricare alvolo con questo comando:

wget https://raw.githubusercontent.com/speed47/spectre-meltdown-checker/master/spectre-meltdown-checker.sh

Poi basta eseguire lo script per verificare la situazione. Per un sistema non protetto si dovrebber vedere una situazione tipo questa:

Notare che oltre alle patch per queste vulnerabilità, il kernel 4.15 introduce diverse altre novità:

  • supporto ad architetture RISC-V;
  • supporto ad AMD SEV (Secure Encripted Virtualization)
  • supporto UNIP (User-Mode Instruction Prevention), per CPU Intel
  • supporto video migliorato e nuove feature per i driver open-source AMDGPU
  • miglioramento del risparmio energetico con l’utilizzo del SATA link power management
Share