During April and May, Intel started updating its processor documentation with a new errata note – and over the weekend we learned why: the Skylake and Kaby Lake silicon has a hyper-threading bug.
The erratum is described in detail on a Debian mailing list, and affects Skylake and Kaby Lake Intel Core processors (in desktop, high-end desktop, embedded and mobile platforms), Xeon v5 and v6 server processors, and some Pentium models.
The Debian advisory says affected users need to disable hyper-threading “immediately” in their BIOS or UEFI settings, because the processors can “dangerously misbehave when hyper-threading is enabled.”
Symptoms can include “application and system misbehaviour, data corruption, and data loss”.
Henrique de Moraes Holschuh, who authored the advisory, notes that all operating systems, not only Linux, are subject to the bug.
Intel's errata note (for example in this document), describes the issue like this:
Under complex micro-architectural conditions, short loops of less than 64 instructions that use AH, BH, CH or DH registers as well as their corresponding wider register (eg RAX, EAX or AX for AH) may cause unpredictable system behaviour. This can only happen when both logical processors on the same physical processor are active.
The issue came to light when Mark Shinwell, a developer working on the OCaml toolchain, contacted the Debian team to explain that the OCaml compiler triggered weird behavior on Intel processors.
Debian's advisory notes that Intel has documented the bug and corrected the cockup in a microcode update for Core 6th generation, Core 7th generation, Xeon v5 and v6, and Core 6th generation X series.
For Debian users:
- Kaby Lake – contact system vendors for BIOS/UEFI updates, and in the meantime disable hyper-threading;
- Skylake – Depending on model, an
intel-microcodepackage is available; otherwise disable hyper-threading and wait for a BIOS/UEFI fix.
Other users will need platform-specific fixes, or for BIOS/UEFI upgrades to land from their system vendors. Windows users, for example, should also be on the look out for a microcode driver update – and consider disabling hyper-threading until it's available. ®
PS: There's more technical detail on the hardware bug, here.