[Eisfair] [e1] eiskernel 3.18.1 (Status 'stable') verfügbar - 3.16er Kernel für eisfair-1

Thomas Bork tom at eisfair.org
Mi Aug 8 22:41:54 CEST 2018


Hi @all,

es ist eine Version 3.18.1 von eiskernel mit dem Status 'stable' für 
eisfair-1 verfügbar.

Intern wird hierfür der Kernel 3.16.57 aus der Kernel-Serie 3.16 
verwendet, die zur Zeit als longterm-Variante die längst mögliche 
Unterstützung bietet.

Siehe dazu:

https://www.kernel.org/category/releases.html

Obwohl der Kernel die KPTI-Patches enthält, werden diese bei uns nicht 
aktiv, da die bisherige Implementation nicht bei 32-Bit-Kerneln greift.

https://de.wikipedia.org/wiki/Kernel_page-table_isolation

Aber es wird die Verwundbarkeit durch Spectre (v1/v2) in dieser 
Kernel-Version vermindert.

https://de.wikipedia.org/wiki/Spectre_(Sicherheitsl%C3%BCcke)

Das sieht dann mit meiner CPU unter 32 Bit so aus:

kernel316 # dmesg | grep -i spectre
[    0.003702] Spectre V2 : Vulnerable: Minimal generic ASM retpoline
[    0.003704] Spectre V2 : Filling RSB on context switch

kernel316 # ls -l /sys/devices/system/cpu/vulnerabilities/
total 0
-r--r--r-- 1 root root 4096 Mar 23 12:58 meltdown
-r--r--r-- 1 root root 4096 Mar 23 12:58 spectre_v1
-r--r--r-- 1 root root 4096 Mar 23 12:58 spectre_v2

kernel316 # cat /sys/devices/system/cpu/vulnerabilities/meltdown
Vulnerable

Es gibt noch keine KPTI für 32 Bit in unserem Kernel.
Wir sind verwundbar.

kernel316 # cat /sys/devices/system/cpu/vulnerabilities/spectre_v1
Mitigation: __user pointer sanitization

Unterstützung ist im Kernel. Die Gefahr wird abgemildert.

kernel316 # cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Vulnerable: Minimal generic ASM retpoline

Wir haben noch keinen gcc mit retpoline-Support. Wir sind verwundbar und 
nur minimal geschützt durch eine generische Unterstützung im Kernel.


Dieser Kernel wird in 3 Varianten angeboten (alle 32-Bit):

1. SMP
2. PAE
3. VIRT

Der SMP-Kernel unterstützt Systeme mit einem oder mehreren Prozessoren 
und Prozessoren mit einem oder mehreren physikalischen oder virtuellen 
Kernen.

Der PAE-Kernel ist der SMP-Kernel plus PAE und Sparse-Memory-Model. Die 
CPU muss die Features cmov und pae unterstützen - das wird bei der 
Installation überprüft.

Ein emulierter mathematischer Co-Prozessor (CONFIG_MATH_EMULATION) ist 
nur noch bei SMP gesetzt (um auch alte 486 ohne Co-Prozessor zu 
unterstützen). Ab PAE ist sowieso immer ein solcher Co-Prozessor 
vorhanden, PAE und VIRT bringen die Emulation deswegen bei uns nicht mit 
- das spart Platz.
Ab PAE ist das NX-Bit gesetzt, PAE und VIRT sind somit sicherer als SMP. 
Ab PAE ist ausserdem CONFIG_TRANSPARENT_HUGEPAGE gesetzt.

Wenn man einen Prozessor verwendet, der cmov und pae unterstützt und 
wenn man noch dazu mehr als 4GB RAM ansprechen möchte, sollte man also 
die PAE-Variante installieren.

Der VIRT-Kernel sollte alle notwendigen Features mitbringen (die die 
verwendete Kernel-Version anbietet), um als Gast-Kernel auf 
Virtualisierungs-Systemen zu laufen. Er ist der PAE-Kernel, erweitert um 
Funktionen für Xen, KVM und Hyper-V.

Diese Kernel-Pakete lassen sich auf allen Systemen mit laufendem Kernel 
3.2.xx-eisfair-1 und 3.16.xx-eisfair-1 installieren.

Beim Update von einem älteren Kernel als 3.16.57-eisfair-1 aus wird *bei 
genügend Platz in /boot* ein lilo-Start-Eintrag für diesen Kernel 
erzeugt, wenn noch kein Backup unter /boot existiert, um problemlos 
diesen alten stabilen Kernel booten zu können. Beim Update von 
3.16.57-eisfair-1 aus werden alle alten Kernel samt der Fallbacks gelöscht.

Zu den angegebenen eiskernel-Namen (z.B. 3.16.57-eisfair-1) und den 
darin enthaltenen Versionen siehe [1].


Änderungen zum stabilen eiskernel 3.18.0:
=========================================
- Es wurden die Intel-Microcode-Updates aus microcode-20180807.tgz
   sowie die AMD-Microcode-Updates aus linux-firmware-
   8d69bab7a3da1913113ea98cefb73d5fa6988286.tar.gz in /lib/firmware
   integriert.


Die Umgehung bestimmter Prozessorlücken erfordert das Zusammenspiel 
eines neuen Microcodes für den Prozessor und des Betriebssystems. Wenn 
man nicht das Glück hat, für sein altes Board neue BIOS-Varianten mit 
aktuellem Microcode zu bekommen, ist man auf einen alternativen 
Mechanismus angewiesen, diesen Microcode in den Prozessor zu laden.
Wie oben zu sehen ist, liefere ich Intel- und AMD-Microcode-Updates mit. 
Die Veränderungen in diesem Kernel erlauben das frühe Laden dieser 
Microcodes.
Um Unterschied zur Version 3.18.0 wird nun immer die initrd mit 
integriertem Microcode verwendet.

Dabei arbeitet das Kernel-Update wie folgt:

Auf nicht virtualisierten prüft das zur Laufzeit existierende 
intel-ucode, ob eine Intel-CPU im System existiert und ob unter 
/lib/firmware/intel-ucode Microcode-Dateien vorhanden sind, die zu 
dieser CPU passen.
Ist das der Fall, wird aus diesen Updates die Datei
${microcode_mount}/kernel/x86/microcode/GenuineIntel.bin erzeugt.

Handelt es sich um eine AMD-CPU, wird aus allen AMD-Microcode-Dateien 
aus /lib/firmware/amd-ucode/microcode_amd*.bin die Datei
${microcode_mount}/kernel/x86/microcode/AuthenticAMD.bin erzeugt.

Wenn ${microcode_mount}/kernel/x86/microcode existiert, wird daraus das 
cpio-Archiv /var/install/initrd/ucode.img erzeugt.

Wenn das cpio-Archiv /var/install/initrd/ucode.img existiert:
- wird die normale neue initrd.gz nach
   /var/install/initrd/initrd.gz.without.ucode umbenannt
- wird /var/install/initrd/initrd.gz.with.ucode aus
   /var/install/initrd/ucode.img und
   /var/install/initrd/initrd.gz.without.ucode erzeugt
- wird /var/install/initrd/initrd.gz.with.ucode nach
   /var/install/initrd/initrd.gz umbenannt und diese zum booten verwendet

Ohne weitere Aktion seitens des Anwenders sollten also, wenn vorhanden, 
neuere Microcode-Updates als im BIOS hinterlegt nach dem Booten auf 
nicht-virtualisierten Systemen aktiv sein.

Prüft das mittels

dmesg | grep micro

Dort sollten Meldungen wie

[    0.000000] CPU0 microcode updated early to revision 0x1b, date = 
2014-05-29
[    0.221951] CPU1 microcode updated early to revision 0x1b, date = 
2014-05-29
[    0.242064] CPU2 microcode updated early to revision 0x1b, date = 
2014-05-29
[    0.262349] CPU3 microcode updated early to revision 0x1b, date = 
2014-05-29
[    0.507267] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507272] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507276] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507281] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507286] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507292] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507296] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507300] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507335] microcode: Microcode Update Driver: v2.00 
<tigran at aivazian.fsnet.co.uk>, Peter Oruba

auftauchen, wenn man einen Prozessor besitzt, für den eine neuere 
Microcode-Version als im BIOS hinterlegt geladen wurde. Das funktioniert 
nur auf nicht-virtualisierten Systemen!

Auf den alten Stand zurück kommt man durch das Kopieren von 
/var/install/initrd/initrd.gz.without.ucode nach /boot/initrd.gz, Aufruf 
von 'lilo' und Reboot.

Muss man aus welchen Gründen auch immer die initramfs bearbeiten und 
möchte danach die Microcodes integrieren, so ist nach folgendem Muster 
zu verfahren:

Die initramfs ohne Microcodes findet sich unter 
/var/install/initrd/initrd.gz.without.ucode.
Die kann man wie bisher manipulieren, nach Bearbeitung nach 
/var/install/initrd/initrd.gz.self kopieren und nach folgendem Muster eine
/var/install/initrd/initrd.gz.with.ucode erzeugen:

cat /var/install/initrd/ucode.img \
     /var/install/initrd/initrd.gz.self \
     >/var/install/initrd/initrd.gz.with.ucode

Nun kann man wahlweise

/var/install/initrd/initrd.gz.self
(das ist das bearbeitete Original ohne Microcode)

oder

/var/install/initrd/initrd.gz.with.ucode
(das ist das bearbeitete Original plus Microcode)

nach /boot/initrd.gz kopieren.
Bitte postet bei Problemen die Ausgabe von

cat /var/log/log.kernel-update

nach dem Kernel-Update.


Dieses Paket bei https://pack-eis.de:
=====================================
PAE : https://www.pack-eis.de/index.php?p=25226
SMP : https://www.pack-eis.de/index.php?p=25227
VIRT: https://www.pack-eis.de/index.php?p=25228


Gleichzeitig wird wie gewohnt auch das Paket eiskernel-dev (Version 
3.18.1) mit den Quellen passend zu diesem Kernel freigegeben.


Änderungen zum vorherigen stabilen eiskernel-dev 3.18.0:
========================================================
- Setzt installierten eiskernel 3.18.1 voraus.


Dieses Paket bei https://pack-eis.de:
=====================================
https://www.pack-eis.de/index.php?p=25229


Der Kernel 3.16.57:
===================
http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/log/?id=refs/tags/v3.16.57


[1]
Übersicht der 3.16er eiskernel-1-Pakete:
========================================

eiskernel-Vers.|  eiskernel-Name   | Patchlevel Vanilla
_______________________________________________________
3.18.1         | 3.16.57-eisfair-1 | 3.16.57
3.18.0         | 3.16.57-eisfair-1 | 3.16.57
3.17.0         | 3.16.57-eisfair-1 | 3.16.57
3.16.0         | 3.16.56-eisfair-1 | 3.16.56
3.15.0         | 3.16.56-eisfair-1 | 3.16.56
3.14.1         | 3.16.54-eisfair-1 | 3.16.54
3.14.0         | 3.16.54-eisfair-1 | 3.16.54
3.13.0         | 3.16.54-eisfair-1 | 3.16.54
3.12.0         | 3.16.52-eisfair-1 | 3.16.52
3.11.0         | 3.16.52-eisfair-1 | 3.16.52
3.10.0         | 3.16.50-eisfair-1 | 3.16.50
3.9.0          | 3.16.50-eisfair-1 | 3.16.50
3.8.0          | 3.16.47-eisfair-1 | 3.16.47
3.7.0          | 3.16.47-eisfair-1 | 3.16.47
3.6.0          | 3.16.46-eisfair-1 | 3.16.46
3.5.0          | 3.16.46-eisfair-1 | 3.16.46
3.4.1          | 3.16.44-eisfair-1 | 3.16.45
3.4.0          | 3.16.44-eisfair-1 | 3.16.44
3.3.1          | 3.16.44-eisfair-1 | 3.16.44
3.3.0          | 3.16.44-eisfair-1 | 3.16.44
3.2.0          | 3.16.42-eisfair-1 | 3.16.43
3.1.2          | 3.16.42-eisfair-1 | 3.16.43
3.1.1          | 3.16.42-eisfair-1 | 3.16.43
3.1.0          | 3.16.42-eisfair-1 | 3.16.42


Ich danke allen Mitgliedern des Teams für Tests und Unterstützung und 
wünsche allen Anwendern weiterhin viel Spass mit eisfair!


Das Posting geht parallel an spline.eisfair und spline.eisfair.dev.
Produktive Rückmeldungen bitte an spline.eisfair.

-- 
der tom
[eisfair-team]


Mehr Informationen über die Mailingliste Eisfair