Blame SOURCES/README.caveats

c59b13
The microcode_ctl package contains microcode files (vendor-provided binary data
c59b13
and/or code in proprietary format that affects behaviour of a device) for Intel
c59b13
CPUs that may be loaded into the CPU during boot.
c59b13
c59b13
The microcode_ctl package contains provisions for some issues related
c59b13
to microcode loading.  While those provisions are expected to suit most users,
c59b13
several knobs are available in order to provide ability to override the default
c59b13
behaviour.
c59b13
c59b13
c59b13
General behaviour
c59b13
=================
c59b13
In RHEL 8 (as well as RHEL 7 before it), there are currently two main handlers
c59b13
for CPU microcode update:
c59b13
 * Early microcode update. It uses GenuineIntel.bin or AuthenticAMD.bin file
c59b13
   placed at the beginning of an initramfs image
c59b13
   (/boot/initramfs-KERNEL_VERSION.img, where "KERNEL_VERSION" is a kernel
c59b13
   version in the same format as provided by "uname -r") as a source
c59b13
   of microcode data, and is performed very early during the boot process
c59b13
   (if the relevant microcode file is available in the aforementioned file).
c59b13
 * On-demand (late) microcode update. It can be triggered by writing "1" to
c59b13
   /sys/devices/system/cpu/microcode/reload file (provided my the "microcode"
c59b13
   module). It relies on request_firmware infrastructure, which searches (and
c59b13
   loads, if found) microcode from a file present in one of the following
c59b13
   directories (in the search order):
c59b13
       /lib/firmware/updates/KERNEL_VERSION/
c59b13
       /lib/firmware/updates/
c59b13
       /lib/firmware/KERNEL_VERSION/
c59b13
       /lib/firmware/
c59b13
  (there is also an additional directory that can be configured via the
c59b13
  "fw_path_para" module option of the "firmware_class" module; as this module
c59b13
  is built-in in RHEL kernel, a boot parameter "firmware_class.fw_path_para"
c59b13
  should be used for that purpose; this is out of the document's scope, however)
c59b13
c59b13
The firmware for Intel CPUs is searched in "intel-ucode" subdirectory, and for
c59b13
AMD CPUs, a file under "amd-ucode" is searched.
c59b13
c59b13
For Intel CPUs, the name of the specific microcode file the kernel tries to load
c59b13
has the format "FF-MM-SS", where "FF" is the family number, "MM" is the model
c59b13
number, and "SS" is the stepping. All those numbers are zero-filled to two digits
c59b13
and are written in hexadecimal (letters are in the lower case).  For AMD CPUs,
c59b13
the file name has the format "microcode_amd_famFFh.bin", where "FF" is the
c59b13
family number, written in hexadecimal, letters are in the lower case, not
c59b13
zero-filled.
c59b13
c59b13
The early microcode is placed into initramfs image by the "dracut" script, which
c59b13
scans the aforementioned subdirectories of the configured list of firmware
c59b13
directories (by default, the list consists of two directories in RHEL 8,
c59b13
"/lib/firmware/updates" and "/lib/firmware").
c59b13
c59b13
In RHEL 8, AMD CPU microcode is shipped as a part of the linux-firmware package,
c59b13
and Intel microcode is shipped as a part of the microcode_ctl package.
c59b13
c59b13
The microcode_ctl package currently includes the following:
c59b13
 * Intel CPU microcode files, placed in /usr/share/microcode_ctl/intel-ucode
c59b13
   directory (currently there are none);
c59b13
 * A dracut module, /usr/lib/dracut/modules.d/99microcode_ctl-fw_dir_override,
c59b13
   that controls which additional firmware directories will be added to dracut's
c59b13
   default configuration;
c59b13
 * A dracut configuration file, /usr/lib/dracut/dracut.conf.d/01-microcode.conf,
c59b13
   that enables inclusion of early microcode to the generated initramfs
c59b13
   in dracut;
c59b13
 * A dracut configuration file,
c59b13
   /usr/lib/dracut/dracut.conf.d/99-microcode-override.conf, that provides a way
c59b13
   to quickly disable 99microcode_ctl-fw_dir-override dracut module;
c59b13
 * A systemd service file, microcode.service, that triggers microcode reload
c59b13
   late during boot;
c59b13
 * A set of directories in /usr/share/microcode_ctl/ucode_with_caveats, each
c59b13
   of which contains configuration and related data for various caveats related
c59b13
   to microcode:
c59b13
   * readme - description of caveat and related information,
c59b13
   * config - caveat configuration file, with syntax as described in "Caveat
c59b13
     configuration" section below,
c59b13
   * intel-ucode - directory containing microcode files related to the caveat;
c59b13
 * A set of support scripts, placed in /usr/libexec/microcode_ctl:
c59b13
   * "check_caveats" is an utility script that performs checks of the target
c59b13
     kernel (and running CPU) in accordance with caveat configuration files
c59b13
     in ucode_with_caveats directory and reports whether it passes them or not,
c59b13
   * "reload_microcode" is a script that is called by microcode.service and
c59b13
     triggers microcode reloading (by writing "1" to
c59b13
     /sys/devices/system/cpu/microcode/reload) if the running kernel passes
c59b13
     check_caveats checks,
c59b13
   * "update_ucode" is a script that populates symlinks to microcode files
c59b13
     in /lib/firmware, so it can be picked up by relevant kernels for the late
c59b13
     microcode loading.
c59b13
c59b13
Also, microcode_ctl RPM includes triggers that run update_ucode script on every
c59b13
installation or removal of a kernel RPM in order to provide microcode files
c59b13
for newly installed kernels and cleanup symlinks for the uninstalled ones.
c59b13
c59b13
c59b13
Caveat configuration
c59b13
--------------------
c59b13
There is a directory for each caveat under
c59b13
/usr/share/microcode_ctl/ucode_with_caveats, containing the following files:
c59b13
 * "config", a configuration file for the caveat;
c59b13
 * "readme", that contains description of the caveat;
c59b13
 * set of related associated microcode files.
c59b13
c59b13
"config" file is a set of lines each containing option name and its value,
c59b13
separated by white space.  Currently, the following options are supported:
c59b13
 * "model" option, which has format "VENDOR_ID FF-MM-SS", that specifies
c59b13
   to which CPU model the caveat is applicable (check_caveats ignores caveats
c59b13
   with non-matching models if "-m" option is passed to it). Can be set
c59b13
   in the configuration file only once (the last provided value is used).
c59b13
 * "vendor" option specifies CPUs of which vendor (as provided
c59b13
   in the /proc/cpuinfo file) the caveat is applicable to (check_caveats
c59b13
   ignores caveats with non-matching models when it is invoked with "-m"
c59b13
   option). Can be set in the configuration file only once.
c59b13
 * "path" is a glob pattern that specifies set of microcode files associated
c59b13
   with the caveat as a relative path to the caveat directory. This option
c59b13
   is used for populating files in /lib/firmware by update_ucode script and
c59b13
   for matching microcode file when dracut is run in host-only mode
c59b13
   (as in that case it uses only the first directory in firmware directory list
c59b13
   to look for the microcode file applicable to the host CPU).  Can be set
c59b13
   in the configuration file multiple times.
c59b13
 * "kernel" is a minimal kernel version that supports proper handling
c59b13
   of the related microcode files during late microcode load.  It may be
c59b13
   provided in one of the following formats that affect the way it is compared
c59b13
   to the running kernel version:
c59b13
    * A.B.C (where A, B, and C are decimal numbers), "upstream version". In this
c59b13
      case, simple version comparison against the respective part of the running
c59b13
      kernel version is used, and the running kernel version should be greater
c59b13
      or equal than the version provided in the configuration option in order
c59b13
      for comparison to succeed (that is, the first part, major version number,
c59b13
      of the running kernel version should be greater than the value provided
c59b13
      in the configuration option, or those should be equal and the second part,
c59b13
      minor version number, should be greater than the minor version number
c59b13
      of the kernel version provided in the configuration option, or the first
c59b13
      two parts should be equal and the third part, patch level, should
c59b13
      be greater or equal the patch level of the version in the configuration
c59b13
      option).
c59b13
    * A.B.C-Y (where A, B, C, and Y are decimal numbers), "Y-stream version".
c59b13
      In this case, A.B.C part should be equal, and Y part of the running kernel
c59b13
      version should be greater or equal than the Y part of the configuration
c59b13
      option version in order to satisfy the comparison requirement.
c59b13
    * A.B.C-Y.Z1.Z2 (where A, B, C, Y, Z1, and Z2 are decimal numbers),
c59b13
      "Z-stream version". In this case, A.B.C-Y part should be equal and Z1.Z2
c59b13
      part of the running kernel should be greater or equal than the respective
c59b13
      part of the configuration option version (when compared as a version)
c59b13
      for comparison to succeed.
c59b13
   Kernel version check passed if at least one comparison of the running kernel
c59b13
   version against a kernel version provided in a configuration option
c59b13
   succeeded.  The "kernel" configuration option can be provided
c59b13
   in the configuration file multiple times.
c59b13
 * "kernel_early" is a minimal kernel version that supports proper handling
c59b13
   of the related microcode during early microcode load. The format of the
c59b13
   option and its semantics is similar to the "kernel" configuration options.
c59b13
   This option can be provided multiple times as well.
c59b13
 * "mc_min_ver_late" is the minimal version of the currently loaded microcode
c59b13
   on the CPU (as reported in /proc/cpuinfo) that supports late microcode
c59b13
   update.  Microcode update will be attempted only if the currently loaded
c59b13
   microcode version is greater or equal the microcode version provided
c59b13
   in the configuration option. Can be set in the configuration file only once.
c59b13
 * "disable" is a way to disable a specific caveat from inside its
c59b13
   configuration. Argument for the argument is a list of stages ("early",
c59b13
   "late") for which the caveat should be disable. The configuration option
c59b13
   can be provided multiple times in a configuration file.
c59b13
 * "blacklist" is a marker for a start of list of blacklisted model names,
c59b13
   one model name per line. The model name of the running CPU (as reported
c59b13
   in /proc/cpuinfo) is compared against the names in the provided list, and,
c59b13
   if there is a match, caveat check fails.
c59b13
c59b13
c59b13
check_caveats script
c59b13
--------------------
c59b13
"check_caveats" is an utility script (called by update_ucode, reload_microcode,
c59b13
dracut module) that performs checks of the target kernel (and running CPU)
c59b13
in accordance with caveat configuration files in directory
c59b13
"/usr/share/microcode_ctl/ucode_with_caveats", and returns information, whether
c59b13
the system passes the checks, or not.
c59b13
c59b13
Usage:
c59b13
    check_caveats [-e] [-k TARGET_KVER] [-c CONFIG]* [-m] [-v]'
c59b13
c59b13
Options:
c59b13
  -e - check for early microcode load possibility (instead of late microcode
c59b13
       load). "kernel_early" caveat configuration options are used for checking
c59b13
       instead of "kernel", and "mc_min_ver_late" is not checked.
c59b13
  -k - target kernel version to check against, $(uname -r) is used otherwise.
c59b13
  -c - caveat(s) to check, all caveat configurations found inside
c59b13
       $MC_CAVEATS_DATA_DIR are checked otherwise.
c59b13
  -m - ignore caveats that do not apply to the current CPU model.
c59b13
  -v - verbose output.
c59b13
c59b13
Environment:
c59b13
  MC_CAVEATS_DATA_DIR - directory that contains caveats configurations,
c59b13
                        "/usr/share/microcode_ctl/ucode_with_caveats"
c59b13
			by default.
c59b13
  FW_DIR - directory containing firmware files (per-kernel configuration
c59b13
           overrides are checked there), "/lib/firmware" by default.
c59b13
  CFG_DIR - directory containing global caveats overrides,
c59b13
            "/etc/microcode_ctl/ucode_with_caveats" by default.
c59b13
c59b13
Output:
c59b13
  Script returns information about caveats check results. Output has a format
c59b13
  of "KEY VALUE1 VALUE2 ..." with KEY defining the semantics of the VALUEs.
c59b13
  Currently, the following data is issued:
c59b13
   - "cfgs" - list of caveats that have been processed (and not skipped
c59b13
      due to missing "config", "readme", or a disallow-* override described
c59b13
      below);
c59b13
   - "skip_cfgs" - list of caveats that have been skipped (due to missing
c59b13
     config/readme file, or because of overrides);
c59b13
   - "paths" - list of glob patterns matching files associated with caveats
c59b13
     that have been processed;
c59b13
   - "ok_cfgs" - list of caveat configurations that have all the checks passed
c59b13
     (or have enforced by one of force-* overrides described below);
c59b13
   - "ok_paths" - list of glob patterns associated with caveat files from
c59b13
     the "ok_cfgs" list;
c59b13
   - "fail_cfgs" - list of caveats that have one of the checks failed.
c59b13
   - "fail_paths" - list of glob patterns associated with caveats from the
c59b13
     "fail_cfgs" list.
c59b13
c59b13
Return value:
c59b13
  - 0 in case caveats check has passed, 1 otherwise.
c59b13
  - In "-d" mode, 0 is always returned.
c59b13
c59b13
Overrides:
c59b13
c59b13
When check_caveats perform its checks, it also checks for presence of files
c59b13
in specific places, and, if they exist, check_caveats skips a caveat or ignores
c59b13
its checks; that mechanism allows overriding the information provided
c59b13
in configuration on local systems and affect the behaviour of the microcode
c59b13
update process.
c59b13
c59b13
Current list of overrides (where $FW_DIR and $CFG_DIR are the environment
c59b13
options described earlier; $kver - the currently processed kernel version,
c59b13
$s is the requested stage ("early" or "late"), $cfg is the caveat directory
c59b13
name):
c59b13
    $FW_DIR/$kver/disallow-$s-$cfg - skip a caveat for the requested stage for
c59b13
                                     a specific kernel version..
c59b13
    $FW_DIR/$kver/force-$s-$cfg - apply a specific caveat file for a specific
c59b13
                                  kernel version for the requested stage without
c59b13
				  performing any checks.
c59b13
    $FW_DIR/$kver/disallow-$cfg - skip a caveat for any stage for a specific
c59b13
                                  kernel version.
c59b13
    $FW_DIR/$kver/force-$cfg - apply a specific caveat for any stage
c59b13
                               for a specific kernel version without checks.
c59b13
    $FW_DIR/$kver/disallow-$s - skip all caveats for a specific stage
c59b13
                                for a specific kernel version.
c59b13
    $CFG_DIR/disallow-$s-$cfg - skip a caveat for a specific stage for all
c59b13
                                kernel versions.
c59b13
    $FW_DIR/$kver/force-$s - apply all caveats for a specific stage
c59b13
                             for a specific kernel version without checks.
c59b13
    $CFG_DIR/force-$s-$cfg - apply a specific caveat for a specific stage for
c59b13
                             all kernel versions without checks.
c59b13
    $FW_DIR/$kver/disallow - skip all caveats for all stages for a specific
c59b13
                             kernel version.
c59b13
    $CFG_DIR/disallow-$cfg - skip a caveat for all stages for all kernel
c59b13
                             versions.
c59b13
    $FW_DIR/$kver/force - apply all caveats for all stages for a specific kernel
c59b13
                          version without checks.
c59b13
    $CFG_DIR/force-$cfg - apply a caveat for all stages for all kernel versions
c59b13
                          without checks.
c59b13
    $CFG_DIR/disallow-$s - skip all caveat for all kernel versions
c59b13
                           for a specific stage.
c59b13
    $CFG_DIR/force-$s - apply all caveats for all kernel versions for  specific
c59b13
                        stage without checks.
c59b13
    $CFG_DIR/disallow - skip all caveats for all stages for all kernel versions
c59b13
                        (disable everything).
c59b13
    $CFG_DIR/force - force all caveats for all stages for all kernel versions
c59b13
                     (enable everything).
c59b13
c59b13
The "apply" action above means creating symlinks in /lib/firmware by
c59b13
update_ucode in case of the "late" stage and adding caveat directory to the list
c59b13
of firmware directories by dracut plugin in case of the "early" stage.
c59b13
c59b13
The files are checked for existence until the first match, so more specific
c59b13
overrides can override more broad ones.
c59b13
c59b13
Also, a caveat is ignored if it lacks either config or readme file.
c59b13
c59b13
c59b13
update_ucode script
c59b13
-------------------
c59b13
"update_ucode" populates symlinks to microcode files in accordance with caveats
c59b13
configuration.  It enables late microcode loading that is invoked by triggering
c59b13
/sys/devices/system/cpu/microcode/reload file.  Since caveats depend
c59b13
on the kernel version, symlinks are populated inside
c59b13
"/lib/firmware/KERNEL_VERSION" directory for each installed kernel.
c59b13
As a consequence, this script is triggered upon each kernel package installation
c59b13
and removal.
c59b13
c59b13
The script has two parts: common and kernel-version-specific.
c59b13
c59b13
During the common part, files are populated from
c59b13
/usr/share/microcode_ctl/intel-ucode in /lib/firmware/intel-ucode. There are
c59b13
several possibilities to affect the process:
c59b13
 * Presence of "/etc/microcode_ctl/intel-ucode-disallow" file leads to skipping
c59b13
   the common part of the script.
c59b13
 * The same for "/lib/firmware/intel-ucode-disallow".
c59b13
c59b13
During the kernel-version-specific part, each caveat is checked against every
c59b13
kernel version, and those combinations, for which caveat check succeeds,
c59b13
gets the symlinks to the associated microcode files populated.
c59b13
 * Absence of "/lib/firmware/KERNEL_VERSION/readme-CAVEAT" prevents update_ucode
c59b13
   from removing symlinks related to the caveat for specific kernel version.
c59b13
 * Since the check is being done by check_caveats, all the overrides that
c59b13
   described there also stay.
c59b13
c59b13
Usage:
c59b13
    update_ucode [--action {add|remove|refresh|list}] [--kernel KERNELVER]*
c59b13
                 [--verbose] [--dry-run] [--cleanup intel_ucode caveats_ucode]
c59b13
                 [--skip-common] [--skip-kernel-specific]
c59b13
c59b13
Options:
c59b13
  --action - action to perform. Currently, the following actions are supported:
c59b13
              * "add" - create new symlinks.
c59b13
              * "remove" - remove old symlinks that are no longer needed.
c59b13
              * "refresh" - re-populate symlinks.
c59b13
              * "list" - list files under control of update_ucode.
c59b13
             By default, "refresh" action is executed.
c59b13
  --kernel - kernel version to process. By default, list of kernel versions
c59b13
             is formed based on contents of /lib/firmware and /lib/modules
c59b13
             directories.
c59b13
  --verbose - verbose output.
c59b13
  --dry-run - do not call commands, just print the invocation lines.
c59b13
  --cleanup - cleanup mode. Used by post-uninstall script during package
c59b13
              upgrades. Removes excess files in accordance to the contents
c59b13
              of the files provided in the arguments to the option.
c59b13
  --skip-common - do not process /lib/firmware directory.
c59b13
  --skip-kernel-specific - do not process /lib/firmware/KERNEL_VERSION
c59b13
                           directories.
c59b13
c59b13
Return value:
c59b13
  0 on success, 1 on error.
c59b13
c59b13
c59b13
reload_microcode script
c59b13
-----------------------
c59b13
"reload_microcode" is a script that is called by microcode.service and
c59b13
triggers late microcode reloading (by writing "1" to
c59b13
/sys/devices/system/cpu/microcode/reload) if the following check are passed:
c59b13
 * the microcode update performed not in a virtualised environment;
c59b13
 * running kernel passes "check_caveats" checks that applicable to the current
c59b13
   CPU model.
c59b13
c59b13
For a virtualised environment check, the script searches the "/proc/cpuinfo"
c59b13
file for presence of the "hypervisor" flag among CPU features (it corresponds
c59b13
to a CPUID feature bit set by hypervisors in order to inform that the kernel
c59b13
operates inside a virtual machine).  This check can be overridden and skipped
c59b13
by creation of a file "/etc/microcode_ctl/ignore-hypervisor-flag".
c59b13
c59b13
The script has no options and always returns 0.
c59b13
c59b13
c59b13
99microcode_ctl-fw_dir_override dracut module
c59b13
---------------------------------------------
c59b13
This dracut module injects directories with microcode files for caveats
c59b13
that pass "early" check_caveats check (with "-e" flag). In addition
c59b13
to "check_caveats" overrides, the following abilities to control module's
c59b13
behaviour are present:
c59b13
 * Presence of one of the following files:
c59b13
   - /etc/microcode_ctl/ucode_with_caveats/skip-host-only-check
c59b13
   - /etc/microcode_ctl/ucode_with_caveats/skip-host-only-check-$cfg
c59b13
   - /lib/firmware/$kver/skip-host-only-check
c59b13
   - /lib/firmware/$kver/skip-host-only-check-$cfg
c59b13
   (where "$kver" is the kernel version in question and "$cfg" is the caveat
c59b13
   directory name) allows skipping matching of microcode file name when dracut's
c59b13
   Host-Only mode is enabled.
c59b13
c59b13
When caveats_check succeeds, caveats directory (not its possibly populated
c59b13
version for late microcode update: "/lib/firmware/KERNEL_VERSION";
c59b13
it is done so in order
c59b13
to have ability to configure list of caveats enabled for early and late
c59b13
microcode update, independently) is added to dracut's list of firmware search
c59b13
directories.
c59b13
c59b13
The module can be disabled by running dracut with
c59b13
"-o microcode_ctl-fw_dir_override" (for one-time exclusion), or it can
c59b13
be disabled permanently by uncommenting string
c59b13
"omit_dracutmodules+=' microcode_ctl-fw_dir_override '" in
c59b13
/usr/lib/dracut/dracut.conf.d/99-microcode-override.conf configuration file.
c59b13
c59b13
See dracut(8), section "Omitting dracut Modules", and dracut.conf(5), variable
c59b13
"omit_dracutmodules" for additional information.
c59b13
c59b13
c59b13
Caveats
c59b13
=======
c59b13
c59b13
Intel Broadwell-EP/EX ("BDX-ML B/M/R0") caveat
c59b13
----------------------------------------------
c59b13
Microcode update process on Intel Broadwell-EP/EX CPUs (BDX-ML B/M/R0,
c59b13
family 6, model 79, stepping 1) has issues that lead to system instability.
c59b13
A series of changes for the Linux kernel has been developed in order to work
c59b13
around those issues; however, as it turned out, some systems have issues even
c59b13
when a microcode update performed on a kernel that contains those changes.
c59b13
As a result, microcode update for this CPU model is disabled by default;
c59b13
the microcode file, however, is still shipped as a part of microcode_ctl
c59b13
package and can be used for performing a microcode update if it is enforced
c59b13
via the aforementioned overridden. (See sections "check_caveats script"
c59b13
and "reload_microcode script" for details).
c59b13
c59b13
Affected microcode: intel-ucode/06-4f-01.
c59b13
c59b13
Mitigation: microcode loading is disabled for the affected CPU model.
c59b13
c59b13
Minimum versions of the kernel package that contain the aforementioned patch
c59b13
series:
c59b13
 - Upstream/RHEL 8: 4.17.0
c59b13
 - RHEL 7.6 onwards:  3.10.0-894
c59b13
 - RHEL 7.5:  3.10.0-862.6.1
c59b13
 - RHEL 7.4:  3.10.0-693.35.1
c59b13
 - RHEL 7.3:  3.10.0-514.52.1
c59b13
 - RHEL 7.2:  3.10.0-327.70.1
c59b13
 - RHEL 6.10: 2.6.32-754.1.1
c59b13
 - RHEL 6.7:  2.6.32-573.58.1
c59b13
 - RHEL 6.6:  2.6.32-504.71.1
c59b13
 - RHEL 6.5:  2.6.32-431.90.1
c59b13
 - RHEL 6.4:  2.6.32-358.90.1
c59b13
c59b13
c59b13
Early microcode load inside a virtual machine
c59b13
---------------------------------------------
c59b13
RHEL 8 kernel supports performing microcode update during early boot stage
c59b13
from a cpio archive placed at the beginning of the initramfs image.  However,
c59b13
when an early microcode update is attempted inside some virtualised
c59b13
environments, that may result in unexpected system behaviour.
c59b13
c59b13
Affected microcode: all.
c59b13
c59b13
Mitigation: early microcode loading is disabled for all CPU models.
c59b13
c59b13
Minimum versions of the kernel package that contain the fix:
c59b13
 - Upstream/RHEL 8: 4.10.0
c59b13
 - RHEL 7.6 onwards: 3.10.0-930
c59b13
 - RHEL 7.5: 3.10.0-862.14.1
c59b13
 - RHEL 7.4: 3.10.0-693.38.1
c59b13
 - RHEL 7.3: 3.10.0-514.57.1
c59b13
 - RHEL 7.2: 3.10.0-327.73.1
c59b13
c59b13
c59b13
Additional information
c59b13
======================
c59b13
Red Hat provides updated microcode, developed by our microprocessor
c59b13
partners, as a customer convenience.  Please contact your hardware vendor
c59b13
to determine whether more recent BIOS/firmware updates are recommended
c59b13
because additional improvements may be available.
c59b13
c59b13
Information regarding microcode revisions required for mitigating specific
c59b13
microarchitectural side-channel attacks is available in the following
c59b13
knowledge base articles:
c59b13
 * CVE-2017-5715 ("Spectre"):
c59b13
   https://access.redhat.com/articles/3436091
c59b13
 * CVE-2018-3639 ("Speculative Store Bypass"):
c59b13
   https://access.redhat.com/articles/3540901
c59b13
 * CVE-2018-3620, CVE-2018-3646 ("L1 Terminal Fault Attack"):
c59b13
   https://access.redhat.com/articles/3562741
c59b13
 * CVE-2018-12130, CVE-2018-12126, CVE-2018-12127, and CVE-2019-11091
c59b13
   ("Microarchitectural Data Sampling"):
c59b13
   https://access.redhat.com/articles/4138151