New article pertaining to CPU microcode updates
Signed-off-by: Leah Rowe <leah@libreboot.org>c20230710
parent
1a1a99a230
commit
a013235031
|
@ -1,3 +1,4 @@
|
|||
microcode.md
|
||||
audit.md
|
||||
e6400nvidia.md
|
||||
libreboot20230423.md
|
||||
|
|
|
@ -0,0 +1,168 @@
|
|||
% No-microcode ROMs available in next Libreboot release (new stable release soon!)
|
||||
% Leah Rowe
|
||||
% 20 June 2023
|
||||
|
||||
As I write this, I'm quite close to providing a new stable release of Libreboot.
|
||||
The final push to get it out the door is underway, with round-the-clock build
|
||||
testing and general polishing.
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
Firstly, what is microcode? In this context, CPU microcode is what configures
|
||||
logic gates in the CPU to implement an instruction set. You can learn more
|
||||
about microcode on the [FAQ](faq.md#microcode).
|
||||
|
||||
In the next Libreboot releases, ROM images that *exclude* CPU microcode updates
|
||||
will once again be available. Libreboot's [Binary Blob Reduction
|
||||
Policy](policy.md) dictates that each mainboard must be provided with as few
|
||||
binary blobs as possible, ideally none. *At present*, *all* x86 and ARM
|
||||
mainboards supported in Libreboot (in `lbmk.git` and in releases) can boot
|
||||
with entirely free software, requiring *zero* blobs of any kind from *coreboot*.
|
||||
|
||||
The nuance of how Libreboot *implements* this policy is described in
|
||||
the [Freedom Status](freedom-status.md) page. Although coreboot (which Libreboot
|
||||
uses for hardware initialisation) *is* a free software project, certain binary
|
||||
blobs are needed on some platforms, for things like raminit (memory controller
|
||||
initialisation). Libreboot tries to reduce or eliminate these, or mitigate
|
||||
their existence (for example, `me_cleaner` is used on newer Intel platforms).
|
||||
|
||||
One exception made in that policy is that CPU microcode updates *must* be
|
||||
provided by default, on all x86 mainboards. The ARM platforms do not use
|
||||
microcode at all. This is a correct policy, because these updates fix critical
|
||||
security and stability issues in the silicon; more information about that
|
||||
can be found [here](policy.md#more-detailed-insight-about-microcode). Since
|
||||
the CPU already has older microcode burned into mask ROM, it makes logical
|
||||
sense to install these updates to get the latest bug fixes.
|
||||
|
||||
In a previous news post,
|
||||
titled [GM45 no-microcode bug mitigations re-added](gm45microcode.md), I
|
||||
announced that Libreboot had re-added certain mitigations, working around bugs
|
||||
caused when microcode is removed on certain Intel GM45 platforms (e.g. X200 or
|
||||
T400 ThinkPads).
|
||||
|
||||
Why?
|
||||
----
|
||||
|
||||
Freedom of choice, that's why. Libreboot's policy explicitly
|
||||
[states](policy.md#configuration), in the context of *adding* binary blobs:
|
||||
|
||||
*It’s natural that the user may want to create a setup that is less libre than
|
||||
the default one in libreboot. This is perfectly acceptable; freedom is superior,
|
||||
and should be encouraged, but the user’s freedom to choose should also be
|
||||
respected, and accomodated.*
|
||||
|
||||
Well, this change simply applies that *principle* in reverse. Roughly speaking:
|
||||
|
||||
It's natural that some people may wish to cause random kernel panics, raminit
|
||||
failures, thermal safety issues, random data corruption in memory, and other
|
||||
similar issues commonly caused by lack of microcode updates. Such folly should
|
||||
be discouraged, but the user's *freedom to choose* should also be respected,
|
||||
and accomodated.
|
||||
|
||||
It is the official view of the Libreboot project that microcode updates do not
|
||||
even quality as *software*. The burned-in microcode *is* software, but the
|
||||
updates only provide hotpatching, essentially turning on or off certain
|
||||
features. The CPU already has older, buggier microcode burned into mask ROM,
|
||||
so the choice is to either update it, or encounter more bugs. Regardless,
|
||||
this is a point of contention for some people.
|
||||
|
||||
How?
|
||||
----
|
||||
|
||||
The change was implemented by [this
|
||||
patch](https://browse.libreboot.org/lbmk.git/commit/?id=f338697b96757977d2a14da00a91236595704fed)
|
||||
on 19 June 2023, in the Libreboot build system.
|
||||
|
||||
In `board.cfg` for each mainboard defined (in Libreboot's build system, lbmk),
|
||||
the following entries are available:
|
||||
|
||||
* `microcode_required="n" or "y"` (it's "n" on ALL boards)
|
||||
* `blobs_required="n" or "y"`("n" on MOST boards)
|
||||
|
||||
If `blobs_required="n"`, the given ROM image `filename.rom`
|
||||
becomes `filename_noblobs.bin` for all versions of it. In this
|
||||
context, *noblobs* means *zero* blobs in the entire boot flash when the
|
||||
final ROM image is flashed to it, regardless of whether coreboot is
|
||||
blob-free, irrespective of microcode updates. ROM images
|
||||
containing `noblobs` in the filename *may* still contain microcode
|
||||
updates, distinguishing *microcode* as a special kind of blob distinct
|
||||
from all others.
|
||||
|
||||
With or without `_noblobs` in the name:
|
||||
|
||||
If `microcode_required="n"`, the given ROM image `filename.rom`
|
||||
is either:
|
||||
|
||||
* If no microcode blob exists within it already, such as on ARM
|
||||
mainboards, the ROM is simply copied to: `filename_nomicrocode.rom`
|
||||
* If the ROM contains microcode (default on most x86 boards, except Qemu
|
||||
or in rare cases where none are advised), `filename.rom` is retained and
|
||||
is copied to `filename_nomicrocode.rom`, and the CPU microcode update blob
|
||||
shall be removed from `filename_nomicrocode.rom`.
|
||||
|
||||
What this means is that ROMs *with* OR *without* microcode will be present,
|
||||
where applicable, on ROM images for each given mainboard. This will be the case
|
||||
by default, for ROM images provided in the next release of Libreboot and all
|
||||
releases that follow.
|
||||
|
||||
Example:
|
||||
|
||||
* `seabios_e6400_4mb_libgfxinit_txtmode_noblobs.rom`
|
||||
* `seabios_e6400_4mb_libgfxinit_txtmode_noblobs_nomicrocode.rom`
|
||||
|
||||
It is *strongly* recommended, by the Libreboot project, that you
|
||||
do *not* use the `_nomicrocode` ROMs on x86 mainboards. These updates
|
||||
are *required* to implement stable x86 ISA, otherwise your CPU will behave
|
||||
in strange, unpredictable ways, which could cause severe bugs in software
|
||||
that cause *real* issues. Issues such as data loss.
|
||||
|
||||
A small but vocal minority of users are unhappy with the presence of these
|
||||
microcode files, so it has been decided that the Libreboot project will once
|
||||
again accomodate such users. This change has been implemented in the most
|
||||
unintrusive way possible, to keep the build system logic clean, contrary to the
|
||||
bloat that existed in many older Libreboot releases.
|
||||
|
||||
In previous releases of Libreboot, no-microcode was the default (microcode
|
||||
updates were excluded entirely, from all releases). This policy was changed
|
||||
during November 2022, as part of an ongoing campaign to support more hardware
|
||||
(from coreboot) within Libreboot, so as to provide many more people with
|
||||
coreboot which, regardless of blob status on each platform, *does* provide
|
||||
increased software freedom compared to fully proprietary boot firmware, which
|
||||
is what people would otherwise use; thus, Libreboot's modern policy is
|
||||
pragmatic, advancing further the cause of *software freedom*.
|
||||
|
||||
By contrast, Libreboot's previous policy was to *ban all binary blobs*, which
|
||||
meant that many mainboards from coreboot were excluded. This resulted in less
|
||||
people achieving a level of software freedom, because to this day, nothing
|
||||
quite like Libreboot exists with the scope and ambition that it has. Libreboot
|
||||
makes coreboot as easy to use as possible for normal, non-technical people who
|
||||
like the idea of coreboot, but are not competent to configure it from scratch.
|
||||
|
||||
Accordingly, the old Libreboot policy, prior to November 2022, *harmed* the
|
||||
Free Software movement. Such harm was *corrected* in November 2022 and, going
|
||||
forward, it is the intention of the Libreboot project to eventually have
|
||||
build targets *for every mainboard that coreboot supports!*
|
||||
|
||||
ARM platforms
|
||||
-------------
|
||||
|
||||
On ARM platforms, microcode is not used at all, so the `nomicrocode`
|
||||
ROM images there are named simply according to what is already
|
||||
the case.
|
||||
|
||||
Removing microcode also possible on older releases
|
||||
==================================================
|
||||
|
||||
Libreboot releases *before* 20221214 excluded microcode by default, and did
|
||||
not provide ROMs *with* microcode.
|
||||
|
||||
Libreboot 20221214, 20230319, 20230413 and 20230423 *include* microcode by
|
||||
default, and do not provide no-microcode ROM images; however, removal is quite
|
||||
simple:
|
||||
|
||||
cbfstool libreboot.rom remove -n cpu_microcode_blob.bin
|
||||
|
||||
Flash the resulting image. Again, expect *bugs*.
|
||||
|
||||
That is all.
|
Loading…
Reference in New Issue