Grazie per aver fornito ulteriori dettagli.
Dai log che hai inviato nel corso della discussione, risulterebbe che, antecedentemente al 22 marzo 2018, era installata sul tuo computer la versione del microcodice
intel-microcode:amd64 3.20170707.1~deb9u1 Prelevando il microcodice di questa versione ed analizzandola, risulta:
- Codice: Seleziona tutto
$ wget http://snapshot.debian.org/archive/debian/20180201T100533Z/pool/non-free/i/intel-microcode/intel-microcode_3.20170707.1%7Edeb9u1.tar.xz
$ tar xf intel-microcode_3.20170707.1~deb9u1.tar.xz
$ cd intel-microcode-3.20170707.1~deb9u1/
$ /usr/sbin/iucode-tool -l *.dat | grep 806e9
006/157: sig 0x000806e9, pf_mask 0xc0, 2017-04-27, rev 0x0062, size 97280
Dal codice sorgente della versione del kernel "
Linux version 4.9.0-6-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02)" risulta che il codice che descrive (in termini di costanti) la tua CPU è:
- Codice: Seleziona tutto
[..]
struct sku_microcode {
u8 model;
u8 stepping;
u32 microcode;
};
static const struct sku_microcode spectre_bad_microcodes[] = {
[..]
{ INTEL_FAM6_KABYLAKE_MOBILE, 0x09, 0x84 },
[..]
};
Il codice sorgente che effettua il controllo del "bad microcode" è il seguente, usando tre parametri relativi alla CPU (model, stepping e versione di microcodice):
- Codice: Seleziona tutto
static bool bad_spectre_microcode(struct cpuinfo_x86 *c)
{
int i;
for (i = 0; i < ARRAY_SIZE(spectre_bad_microcodes); i++) {
if (c->x86_model == spectre_bad_microcodes[i].model &&
c->x86_mask == spectre_bad_microcodes[i].stepping)
return (c->microcode <= spectre_bad_microcodes[i].microcode);
}
return false;
}
Con il nuovo microcodice intel-microcode 3.20180312.1~bpo9+1, (che hai installato a partire dal 23 marzo, se non erro), risulta:
- Codice: Seleziona tutto
/usr/sbin/iucode-tool -l kernel/x86/microcode/GenuineIntel.bin
microcode bundle 1: kernel/x86/microcode/GenuineIntel.bin
selected microcodes:
001/001: sig 0x000806e9, pf_mask 0xc0, 2018-01-21, rev 0x0084, size 98304
001/002: sig 0x000806ea, pf_mask 0xc0, 2018-01-21, rev 0x0084, size 97280
Dal log che hai inviato, con il microcodice più recente, la CPU si identifica come:
- Codice: Seleziona tutto
$ cat /proc/cpuinfo
model : 142
stepping : 9
microcode : 0x84
Stante quanto sopra indicato, se prima del 22 marzo il precedente microcodice non faceva scattare il messaggio di avviso (a parità di controllo su modello del processore, stepping e test su versione di microcodice <= 0x84 in entrambe le versioni del microcodice), devo supporre che la precedente versione del microcodice non impostava nessuno dei seguenti flag della CPU (X86_FEATURE_SPEC_CTRL, X86_FEATURE_INTEL_STIBP, X86_FEATURE_IBRS e X86_FEATURE_IBPB):
- Codice: Seleziona tutto
/* Now if any of them are set, check the blacklist and clear the lot */
if ((cpu_has(c, X86_FEATURE_SPEC_CTRL) ||
cpu_has(c, X86_FEATURE_INTEL_STIBP) ||
cpu_has(c, X86_FEATURE_IBRS) || cpu_has(c, X86_FEATURE_IBPB) ||
cpu_has(c, X86_FEATURE_STIBP)) && bad_spectre_microcode(c)) {
pr_warn("Intel Spectre v2 broken microcode detected; disabling Speculation Control\n");
[..]
In effetti, questi flag della CPU (X86_FEATURE_SPEC_CTRL, X86_FEATURE_INTEL_STIBP, X86_FEATURE_IBRS e X86_FEATURE_IBPB)
dovrebbero essere implementati dal nuovo microcodice nella CPU, come espressione della mitigazione della vulnerabilità meltdown/spectre, e per questo motivo - devo presumere - non comparivano con la precedente versione del microcodice (che non prevedeva correzioni per le vulnerabilità meltdown/spectre,in quanto antecedente allo loro scoperta).
A questo punto, immagino, ti starai chiedendo perché il messaggio "Intel Spectre v2 broken microcode detected; disabling Speculation Control" continua a comparire con la nuova (3.20180312.1~bpo9+1) versione del microcodice. La risposta è che, la versione 0x84 del microcodice per la cpu intel non era ancora considerata sicura ed era/è, pertanto, inserita nella "blacklist" nel codice del kernel (
Linux version 4.9.0-6-amd64 Debian 4.9.82-1+deb9u3) al momento del rilascio (2018-03-02).