From 5a312ef79289cc4e0438878eb05d65fa9f442d36 Mon Sep 17 00:00:00 2001 From: japabu Date: Thu, 1 Oct 2026 03:51:26 +0200 Subject: [PATCH 1/7] toyos-microcode: Intel update files validated and matched to a CPU, pure (WIP) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Work in progress, paused for re-prioritisation: the host gate has not run. `cargo test -p toyos-microcode` exits 0 (15 tests). The issue's design for applying the update (kernel, early, on each CPU), the mutations and `cargo run -- --ci host` are still owed; STATE.md in the job scratchpad lists them. What landed: - toyos-microcode, `no_std` and `forbid(unsafe_code)`: `select(file, cpu)` walks a file's updates end to end, validates each to SDM Vol. 3A §12.11 (order number 325384-093US: header version 1, loader revision 1, data size in dwords, total size in KiB, header+data checksum, extended signature table size, its checksum, each entry's triple) and answers Load, Current or NoMatch, or refuses the whole file by name at the offending update's offset. Revisions compare signed, as Table 12-7 and Example 12-10 say; Linux compares them unsigned, and no update Intel publishes has the sign bit set. - toyos-microcode/intel-ucode/06-8c-01: Intel's update for signature 0x806c1, flags 0x80, revision 0xbe, byte-identical to the file at tag microcode-20260925 (commit bdc92abe5c49) of intel/Intel-Linux-Processor-Microcode-Data-Files, sha256 efe83e312b90f7fe4b8f75260087edf03e048d2f4f80caef2ef631c842714bb3. - NOTICE quotes Intel's licence (binary redistribution without modification permitted, notice and disclaimer reproduced, no reverse engineering) and licenses/Intel-microcode-license.txt carries it verbatim; COMMITTED_FILES gains the row. No image ships the file yet, so the licence gate does not judge LicenseRef-Intel-Microcode; the step that embeds it must. Measured: - The T14 (i5-1135G7, CPUID 0x806c1, BIOS N34ET71W 1.71 of 05/09/2026) runs revision 0xbe under its pinned Ubuntu with no early update logged: PR #601's toyos-t14linux/s0/t14/cpuinfo.txt and kernel-log.txt at 44eb3c2e ("microcode: Current revision: 0x000000be", no "updated early" line). Its IA32_PLATFORM_ID was not captured; the file names platform 7 alone. - Intel's current release for 06-8c-01/80 is 0xbe (releasenote.md, microcode-20260210 section; unchanged through microcode-20260925). So on the T14 the update is a no-op: its firmware is already current. - Differential over every update Intel publishes at microcode-20260925: 156 files, 231 updates (20 with an extended signature table, 77 extended signatures, 76 with data size 0) are all accepted, and for each of 660 (signature, platform) pairs any update names, `select` returns the file's newest update naming it, as a separate reader written from Tables 12-7 to 12-10 computes. All 77 extended signatures satisfy the triple equality the crate checks (Linux's `intel_microcode_sanity_check`). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L --- Cargo.lock | 4 + Cargo.toml | 1 + NOTICE | 51 ++++++ licenses/Intel-microcode-license.txt | 37 +++++ src/licence.rs | 8 + toyos-microcode/Cargo.toml | 10 ++ toyos-microcode/intel-ucode/06-8c-01 | Bin 0 -> 112640 bytes toyos-microcode/src/lib.rs | 232 +++++++++++++++++++++++++++ toyos-microcode/src/tests.rs | 212 ++++++++++++++++++++++++ 9 files changed, 555 insertions(+) create mode 100644 licenses/Intel-microcode-license.txt create mode 100644 toyos-microcode/Cargo.toml create mode 100644 toyos-microcode/intel-ucode/06-8c-01 create mode 100644 toyos-microcode/src/lib.rs create mode 100644 toyos-microcode/src/tests.rs diff --git a/Cargo.lock b/Cargo.lock index f22b64e4ae1..dcd168039ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1125,6 +1125,10 @@ dependencies = [ "toyos-dns", ] +[[package]] +name = "toyos-microcode" +version = "0.1.0" + [[package]] name = "toyos-mixer" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 57ebd52d1eb..76b86457d61 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ members = [ "toyos-logstream", "toyos-manifest", "toyos-mdns", + "toyos-microcode", "toyos-mixer", "toyos-net-tcp", "toyos-net-wire", diff --git a/NOTICE b/NOTICE index 1b5c29be846..19f74d82c3e 100644 --- a/NOTICE +++ b/NOTICE @@ -364,3 +364,54 @@ the tool, not the bytes a user's own data becomes when the tool writes it: the layout is a published on-disk format, not a copyrightable work of the program, and the file contents are ours. The tool is not distributed with this repository in any form. + + +toyos-microcode/intel-ucode/06-8c-01 — Intel microcode, redistributable unmodified +---------------------------------------------------------------------------------- + + 112,640 bytes, update revision 0xbe for processor signature 0x806c1, + processor flags 0x80 (Tiger Lake B0/B1, the T14's i5-1135G7) + sha256 efe83e312b90f7fe4b8f75260087edf03e048d2f4f80caef2ef631c842714bb3 + Upstream: https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files, + `intel-ucode/06-8c-01` at tag microcode-20260925 + (commit bdc92abe5c499c3fd7988b76a128d05c9120a520), byte for byte + Licence text: licenses/Intel-microcode-license.txt (upstream's `license`, + sha256 03efb1491c7e899feb2665fa299363e64035e5444c1b8bc1f6ebed30de964e12) + SPDX-License-Identifier: LicenseRef-Intel-Microcode + +Intel's terms permit redistribution in binary form without modification, on +three conditions, quoted: + +> 1. Redistributions must reproduce the above copyright notice and the +> following disclaimer in the documentation and/or other materials provided +> with the distribution. +> +> 2. Neither the name of Intel Corporation nor the names of its suppliers may +> be used to endorse or promote products derived from this software without +> specific prior written permission. +> +> 3. No reverse engineering, decompilation, or disassembly of this software +> is permitted. + +The copyright notice and disclaimer the first condition names: + + Copyright (c) 2018-2021 Intel Corporation. + All rights reserved. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +`toyos-microcode` reads only what the SDM documents — the 48-byte header, the +checksums and the extended signature table (Vol. 3A §12.11) — and hands the +update data on whole; nothing here decodes, decompiles or disassembles it. No +image ships this file yet: when one does, the first condition puts the notice +above in the image beside it. diff --git a/licenses/Intel-microcode-license.txt b/licenses/Intel-microcode-license.txt new file mode 100644 index 00000000000..cb763c91a31 --- /dev/null +++ b/licenses/Intel-microcode-license.txt @@ -0,0 +1,37 @@ +Copyright (c) 2018-2021 Intel Corporation. +All rights reserved. + +Redistribution. + +Redistribution and use in binary form, without modification, are permitted, +provided that the following conditions are met: + +1. Redistributions must reproduce the above copyright notice and the + following disclaimer in the documentation and/or other materials provided + with the distribution. + +2. Neither the name of Intel Corporation nor the names of its suppliers may + be used to endorse or promote products derived from this software without + specific prior written permission. + +3. No reverse engineering, decompilation, or disassembly of this software + is permitted. + + +"Binary form" includes any format that is commonly used for electronic +conveyance that is a reversible, bit-exact translation of binary +representation to ASCII or ISO text, for example "uuencode". + +DISCLAIMER. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/src/licence.rs b/src/licence.rs index 437c9ac1924..e992ba5a747 100644 --- a/src/licence.rs +++ b/src/licence.rs @@ -430,6 +430,14 @@ pub const COMMITTED_FILES: &[(&str, &str, &str, Terms)] = &[ "ours: a ToyOS binary this build produced (toyos-symbols/tests/real.rs)", Terms::Spdx("MIT OR Apache-2.0"), ), + // Intel's microcode update for the T14's CPU, unmodified; `NOTICE` carries + // the licence, its upstream tag and the digest. + ( + "toyos-microcode/intel-ucode/06-8c-01", + "efe83e312b90f7fe4b8f75260087edf03e048d2f4f80caef2ef631c842714bb3", + "NOTICE", + Terms::Spdx("LicenseRef-Intel-Microcode"), + ), ]; /// `NOTICE` sections that name no files, and why. diff --git a/toyos-microcode/Cargo.toml b/toyos-microcode/Cargo.toml new file mode 100644 index 00000000000..5a259ff2508 --- /dev/null +++ b/toyos-microcode/Cargo.toml @@ -0,0 +1,10 @@ +# A member of the host workspace (root `Cargo.toml`): +# `no_std` so the kernel can depend on it by path, and its tests run on the host. + +[package] +name = "toyos-microcode" +description = "Intel microcode update files validated and matched to a CPU as the SDM's Microcode Update Facilities define them, pure." +version = "0.1.0" +edition = "2021" +license = "MIT OR Apache-2.0" +publish = false diff --git a/toyos-microcode/intel-ucode/06-8c-01 b/toyos-microcode/intel-ucode/06-8c-01 new file mode 100644 index 0000000000000000000000000000000000000000..6cbf8811ef062e60ae5af3028f4a331194db1bb8 GIT binary patch literal 112640 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

2I<=Xoo(OUe$egN>Pk6qKTcv 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

~xvagY)AXE(k@0c?5r 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�VlEgq61)jqRr1DcYH) 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 ZH~{0|(=2vKx|&7nO$pkA_L)p~z7OXo$M^sM literal 0 HcmV?d00001 diff --git a/toyos-microcode/src/lib.rs b/toyos-microcode/src/lib.rs new file mode 100644 index 00000000000..6183c278656 --- /dev/null +++ b/toyos-microcode/src/lib.rs @@ -0,0 +1,232 @@ +//! Intel microcode update files, read as the SDM defines them, pure. +//! +//! A file Intel publishes for one processor signature is updates laid end to +//! end. [`select`] validates every one against SDM Vol. 3A §12.11 (order +//! number 325384-093US) — header, checksum and the optional extended signature +//! table — and answers with the newest that names a CPU's signature and +//! platform, or why it loads none. One malformed update refuses the whole file. +//! +//! Only the documented header, checksums and signature table are read. The +//! update data is the maker's signed payload: handed on whole, never +//! interpreted. +//! +//! Pure: no I/O, no allocation, no `unsafe`. The caller reads the CPU. + +#![no_std] +#![forbid(unsafe_code)] + +#[cfg(test)] +mod tests; + +/// The header's length, and so the offset of the update data (Table 12-7). +const HEADER: usize = 48; +/// The update data's length when the header's Data Size is 0 (Table 12-7). +const DEFAULT_DATA: usize = 2000; +/// The extended signature table's header: count, checksum, 12 reserved bytes +/// (Table 12-9). +const EXT_HEADER: usize = 20; +/// One extended signature: signature, processor flags, checksum (Table 12-10). +const EXT_SIGNATURE: usize = 12; +/// Total Size is "always a multiple of 1024" (Table 12-7). +const GRANULE: usize = 1024; + +/// CPUID.01H:EAX, compared whole with an update's (§12.11.3). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Signature(pub u32); + +/// Which bit of an update's processor flags names this CPU's platform +/// (§12.11.4). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct PlatformId(u8); + +impl PlatformId { + /// `IA32_PLATFORM_ID` (MSR 17H): bits 52:50 (Table 12-11). + pub const fn from_msr(msr: u64) -> Self { + Self((msr >> 50) as u8 & 7) + } + + const fn flag(self) -> u32 { + 1 << self.0 + } +} + +/// An update revision. Signed (Table 12-7): one update is newer than another +/// only when numerically larger (Example 12-10). +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct Revision(pub i32); + +impl Revision { + /// `IA32_BIOS_SIGN_ID` (MSR 8BH) read after writing it 0 and executing + /// CPUID.01H: the revision is its upper dword (§12.11.7.1). + pub const fn from_sign_id(msr: u64) -> Self { + Self((msr >> 32) as u32 as i32) + } +} + +/// What one CPU reports, read on that CPU. +#[derive(Clone, Copy, Debug)] +pub struct Cpu { + pub signature: Signature, + pub platform: PlatformId, + pub revision: Revision, +} + +/// One update out of a file, validated. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Update<'a> { + /// Header, data and extended signature table: Total Size bytes. + bytes: &'a [u8], + data: usize, +} + +impl<'a> Update<'a> { + pub fn revision(&self) -> Revision { + Revision(dword(self.bytes, 4) as i32) + } + + /// The update data. `IA32_BIOS_UPDT_TRIG` is written its linear address, + /// which must be 16-byte aligned and mapped present (§12.11.6). + pub fn data(&self) -> &'a [u8] { + &self.bytes[HEADER..HEADER + self.data] + } + + /// The header's signature and flags, then each extended signature's + /// (Examples 12-5 and 12-6). + fn names(&self, cpu: &Cpu) -> bool { + let primary = (dword(self.bytes, 12), dword(self.bytes, 24)); + let table = self.bytes.get(HEADER + self.data + EXT_HEADER..).unwrap_or(&[]); + let extended = table.chunks_exact(EXT_SIGNATURE).map(|s| (dword(s, 0), dword(s, 4))); + core::iter::once(primary) + .chain(extended) + .any(|(sig, flags)| sig == cpu.signature.0 && flags & cpu.platform.flag() != 0) + } +} + +/// What a valid file holds for one CPU. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Choice<'a> { + /// The newest update naming the CPU, newer than the revision it runs. + Load(Update<'a>), + /// The newest update naming the CPU is this revision, and the CPU already + /// runs it or a newer one. + Current(Revision), + /// No update in the file names the CPU. + NoMatch, +} + +/// Why a file is refused: the offset of the update that is malformed, and how. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Refused { + pub at: usize, + pub why: Refusal, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Refusal { + /// The bytes end before the header does, or before Total Size says the + /// update does. + Truncated { need: usize, have: usize }, + /// Header Version is not 1, the only version §12.11 defines. + HeaderVersion(u32), + /// Loader Revision is not 1, the only loader §12.11.6 describes. + LoaderRevision(u32), + /// Data Size is not a multiple of a dword. + DataSize(usize), + /// Total Size is not a multiple of 1024. + TotalSize(usize), + /// Total Size is smaller than the header and data it holds. + TotalBelowData { total: usize, data: usize }, + /// The header's and data's dwords sum to this, not to 0 (§12.11.5). + Checksum(u32), + /// The extended signature table is not 20 bytes and 12 for each signature + /// its count names. + ExtendedTableSize { len: usize }, + /// The extended signature table's dwords sum to this, not to 0 (§12.11.2). + ExtendedTableChecksum(u32), + /// This extended signature's checksum does not stand in for the header's + /// (Table 12-10). + ExtendedSignatureChecksum { index: usize }, +} + +/// The update in `file` to load on `cpu`, or why there is none. +pub fn select<'a>(file: &'a [u8], cpu: &Cpu) -> Result, Refused> { + let mut newest: Option> = None; + let mut at = 0; + while at < file.len() { + let update = parse(&file[at..]).map_err(|why| Refused { at, why })?; + at += update.bytes.len(); + if update.names(cpu) && newest.is_none_or(|n| update.revision() > n.revision()) { + newest = Some(update); + } + } + Ok(match newest { + None => Choice::NoMatch, + Some(update) if update.revision() > cpu.revision => Choice::Load(update), + Some(update) => Choice::Current(update.revision()), + }) +} + +/// The update `bytes` starts with. +fn parse(bytes: &[u8]) -> Result, Refusal> { + let have = bytes.len(); + let header = bytes.get(..HEADER).ok_or(Refusal::Truncated { need: HEADER, have })?; + match dword(header, 0) { + 1 => {} + version => return Err(Refusal::HeaderVersion(version)), + } + match dword(header, 20) { + 1 => {} + loader => return Err(Refusal::LoaderRevision(loader)), + } + let (data, total) = match dword(header, 28) { + 0 => (DEFAULT_DATA, HEADER + DEFAULT_DATA), + size => (size as usize, dword(header, 32) as usize), + }; + if data % 4 != 0 { + return Err(Refusal::DataSize(data)); + } + if total % GRANULE != 0 { + return Err(Refusal::TotalSize(total)); + } + let table_len = total + .checked_sub(HEADER + data) + .ok_or(Refusal::TotalBelowData { total, data })?; + let bytes = bytes.get(..total).ok_or(Refusal::Truncated { need: total, have })?; + + match sum(&bytes[..HEADER + data]) { + 0 => {} + sum => return Err(Refusal::Checksum(sum)), + } + if table_len != 0 { + let table = &bytes[HEADER + data..]; + let count = table.get(..EXT_HEADER).map(|h| dword(h, 0) as usize); + if count.is_none_or(|n| table_len != EXT_HEADER + n * EXT_SIGNATURE) { + return Err(Refusal::ExtendedTableSize { len: table_len }); + } + match sum(table) { + 0 => {} + sum => return Err(Refusal::ExtendedTableChecksum(sum)), + } + // An extended signature, flags and checksum replace the header's + // three in the update it stands for, so the two triples sum alike. + let header = dword(bytes, 12).wrapping_add(dword(bytes, 16)).wrapping_add(dword(bytes, 24)); + for (index, s) in table[EXT_HEADER..].chunks_exact(EXT_SIGNATURE).enumerate() { + if dword(s, 0).wrapping_add(dword(s, 4)).wrapping_add(dword(s, 8)) != header { + return Err(Refusal::ExtendedSignatureChecksum { index }); + } + } + } + Ok(Update { bytes, data }) +} + +/// The little-endian dword at `at`. +fn dword(bytes: &[u8], at: usize) -> u32 { + let mut word = [0; 4]; + word.copy_from_slice(&bytes[at..at + 4]); + u32::from_le_bytes(word) +} + +/// Every dword of `bytes` summed, unsigned, with wrap (§12.11.5). +fn sum(bytes: &[u8]) -> u32 { + bytes.chunks_exact(4).fold(0, |sum, w| sum.wrapping_add(dword(w, 0))) +} diff --git a/toyos-microcode/src/tests.rs b/toyos-microcode/src/tests.rs new file mode 100644 index 00000000000..5dbe50b82e6 --- /dev/null +++ b/toyos-microcode/src/tests.rs @@ -0,0 +1,212 @@ +//! The T14's own update as Intel publishes it, and updates built here to the +//! SDM's layout for every refusal and every arm the real file does not reach. + +extern crate std; + +use std::vec; +use std::vec::Vec; + +use super::*; + +/// `intel-ucode/06-8c-01`, pinned by its digest in `NOTICE`. +const T14_FILE: &[u8] = include_bytes!("../intel-ucode/06-8c-01"); + +/// The T14's i5-1135G7 at the revision its firmware loads. Its platform is +/// the one platform the file's flags name. +const T14: Cpu = Cpu { + signature: Signature(0x0008_06c1), + platform: PlatformId(7), + revision: Revision(0xbe), +}; + +fn put(bytes: &mut [u8], at: usize, value: u32) { + bytes[at..at + 4].copy_from_slice(&value.to_le_bytes()); +} + +/// Rewrite the header's checksum so the header and data sum to 0 again. +fn reseal(update: &mut [u8], data: usize) { + put(update, 16, 0); + let sum = sum(&update[..HEADER + data]); + put(update, 16, sum.wrapping_neg()); +} + +/// A 2048-byte update to Tables 12-7 to 12-10: `signature` and `flags` in the +/// header, `extended` as its extended signature table, every checksum true. +fn build(signature: u32, flags: u32, revision: u32, extended: &[(u32, u32)]) -> Vec { + let table = if extended.is_empty() { 0 } else { EXT_HEADER + EXT_SIGNATURE * extended.len() }; + let data = 2048 - HEADER - table; + let mut update = vec![0; 2048]; + for (i, word) in update[HEADER..HEADER + data].chunks_exact_mut(4).enumerate() { + word.copy_from_slice(&(i as u32).wrapping_mul(0x9e37_79b9).to_le_bytes()); + } + for (at, value) in [(0, 1), (4, revision), (12, signature), (20, 1), (24, flags)] { + put(&mut update, at, value); + } + put(&mut update, 28, data as u32); + put(&mut update, 32, 2048); + reseal(&mut update, data); + if table != 0 { + let header = dword(&update, 12).wrapping_add(dword(&update, 16)).wrapping_add(dword(&update, 24)); + let at = HEADER + data; + put(&mut update, at, extended.len() as u32); + for (i, &(sig, flags)) in extended.iter().enumerate() { + let entry = at + EXT_HEADER + EXT_SIGNATURE * i; + put(&mut update, entry, sig); + put(&mut update, entry + 4, flags); + put(&mut update, entry + 8, header.wrapping_sub(sig).wrapping_sub(flags)); + } + let sum = sum(&update[at..]); + put(&mut update, at + 4, sum.wrapping_neg()); + } + update +} + +fn refusal(file: &[u8]) -> Refused { + select(file, &T14).expect_err("a malformed file selects nothing") +} + +#[test] +fn the_t14_runs_intels_newest_update_for_its_cpu() { + assert_eq!(select(T14_FILE, &T14), Ok(Choice::Current(Revision(0xbe)))); +} + +#[test] +fn a_t14_below_it_loads_its_data_which_follows_the_header() { + let older = Cpu { revision: Revision(0xbd), ..T14 }; + let Ok(Choice::Load(update)) = select(T14_FILE, &older) else { panic!("0xbe is newer than 0xbd") }; + assert_eq!(update.revision(), Revision(0xbe)); + assert_eq!(update.data(), &T14_FILE[HEADER..]); +} + +#[test] +fn another_platform_or_stepping_is_not_named() { + for platform in 0..7 { + assert_eq!(select(T14_FILE, &Cpu { platform: PlatformId(platform), ..T14 }), Ok(Choice::NoMatch)); + } + let stepping_2 = Cpu { signature: Signature(0x0008_06c2), ..T14 }; + assert_eq!(select(T14_FILE, &stepping_2), Ok(Choice::NoMatch)); +} + +#[test] +fn the_msrs_are_read_where_the_sdm_puts_them() { + assert_eq!(PlatformId::from_msr(7 << 50), PlatformId(7)); + assert_eq!(PlatformId::from_msr(!(7 << 50)), PlatformId(0)); + assert_eq!(Revision::from_sign_id(0xbe << 32 | 0xffff_ffff), Revision(0xbe)); +} + +#[test] +fn a_flipped_bit_anywhere_in_header_or_data_is_refused() { + let mut file = T14_FILE.to_vec(); + for at in (0..HEADER).chain((HEADER..file.len()).step_by(4093)) { + file[at] ^= 1; + assert!(select(&file, &T14).is_err(), "a flip at byte {at} was accepted"); + file[at] ^= 1; + } + file[4096] ^= 1; + assert_eq!(refusal(&file), Refused { at: 0, why: Refusal::Checksum(u32::MAX) }); +} + +#[test] +fn a_file_cut_short_is_refused() { + let len = T14_FILE.len(); + assert_eq!( + refusal(&T14_FILE[..len - 4]).why, + Refusal::Truncated { need: len, have: len - 4 } + ); + assert_eq!(refusal(&T14_FILE[..HEADER - 1]).why, Refusal::Truncated { need: HEADER, have: HEADER - 1 }); +} + +#[test] +fn a_malformed_update_after_a_good_one_refuses_the_file() { + let mut file = T14_FILE.to_vec(); + file.extend_from_slice(&[0; HEADER]); + assert_eq!(refusal(&file), Refused { at: T14_FILE.len(), why: Refusal::HeaderVersion(0) }); +} + +#[test] +fn a_header_or_loader_version_other_than_1_is_refused() { + for (at, why) in [(0, Refusal::HeaderVersion(2)), (20, Refusal::LoaderRevision(2))] { + let mut update = build(T14.signature.0, 0x80, 0xc0, &[]); + put(&mut update, at, 2); + reseal(&mut update, 2000); + assert_eq!(refusal(&update).why, why); + } +} + +#[test] +fn sizes_off_their_granule_or_inside_out_are_refused() { + let cases: [(u32, u32, Refusal); 3] = [ + (1998, 2048, Refusal::DataSize(1998)), + (2000, 2047, Refusal::TotalSize(2047)), + (3024, 2048, Refusal::TotalBelowData { total: 2048, data: 3024 }), + ]; + for (data, total, why) in cases { + let mut update = build(T14.signature.0, 0x80, 0xc0, &[]); + put(&mut update, 28, data); + put(&mut update, 32, total); + assert_eq!(refusal(&update).why, why); + } +} + +#[test] +fn a_zero_data_size_is_2000_bytes_of_data() { + let mut update = build(T14.signature.0, 0x80, 0xc0, &[]); + put(&mut update, 28, 0); + put(&mut update, 32, 0); + reseal(&mut update, 2000); + let Ok(Choice::Load(loaded)) = select(&update, &T14) else { panic!("0xc0 is newer than 0xbe") }; + assert_eq!(loaded.data().len(), 2000); +} + +#[test] +fn an_extended_signature_names_a_cpu_the_header_does_not() { + let update = build(0x0009_06a3, 0x80, 0xc0, &[(0x0008_06c2, 0x01), (T14.signature.0, 0x80)]); + let Ok(Choice::Load(loaded)) = select(&update, &T14) else { panic!("the second entry names the T14") }; + assert_eq!(loaded.data().len(), 2048 - HEADER - EXT_HEADER - 2 * EXT_SIGNATURE); + let wrong_platform = build(0x0009_06a3, 0x80, 0xc0, &[(T14.signature.0, 0x01)]); + assert_eq!(select(&wrong_platform, &T14), Ok(Choice::NoMatch)); +} + +#[test] +fn a_damaged_extended_table_is_refused() { + let at = 2048 - EXT_HEADER - 2 * EXT_SIGNATURE; + let good = build(0x0009_06a3, 0x80, 0xc0, &[(0x0008_06c2, 0x01), (T14.signature.0, 0x80)]); + + let mut entry = good.clone(); + let signature = at + EXT_HEADER + EXT_SIGNATURE; + let (sig, sum) = (dword(&entry, signature), dword(&entry, at + 4)); + put(&mut entry, signature, sig + 1); + put(&mut entry, at + 4, sum.wrapping_sub(1)); + assert_eq!(refusal(&entry).why, Refusal::ExtendedSignatureChecksum { index: 1 }); + + let mut table = good.clone(); + table[at + 8] ^= 1; + assert_eq!(refusal(&table).why, Refusal::ExtendedTableChecksum(1)); + + let mut count = good; + put(&mut count, at, 3); + let len = EXT_HEADER + 2 * EXT_SIGNATURE; + assert_eq!(refusal(&count).why, Refusal::ExtendedTableSize { len }); +} + +#[test] +fn the_newest_update_naming_the_cpu_is_chosen_wherever_it_sits() { + let newer = build(T14.signature.0, 0x80, 0xc0, &[]); + let other = build(T14.signature.0, 0x01, 0xd0, &[]); + for file in [[T14_FILE, &newer[..], &other[..]].concat(), [&other[..], &newer[..], T14_FILE].concat()] { + let Ok(Choice::Load(update)) = select(&file, &T14) else { panic!("0xc0 is newer than 0xbe") }; + assert_eq!(update.revision(), Revision(0xc0)); + } +} + +#[test] +fn a_revision_is_signed() { + let negative = build(T14.signature.0, 0x80, 0x8000_0000, &[]); + let cpu = Cpu { revision: Revision(0x7fff_ffff), ..T14 }; + assert_eq!(select(&negative, &cpu), Ok(Choice::Current(Revision(i32::MIN)))); +} + +#[test] +fn an_empty_file_names_nobody() { + assert_eq!(select(&[], &T14), Ok(Choice::NoMatch)); +} From 328b8d981461278ba58cfb59bcfad043a854072a Mon Sep 17 00:00:00 2001 From: japabu Date: Thu, 1 Oct 2026 07:49:13 +0200 Subject: [PATCH 2/7] issues: the kernel loads no CPU microcode, and where and how it will MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The owner ruled on 2026-09-30 that the kernel loads maker-signed microcode, so the question becomes a defect. This is the same rename PR #645 makes, with #645's text kept verbatim (its lines are a subset of this file's), and the citation in the Linux-parity track moved to the same line #645 writes. Added to it, from this branch's measurements: - The T14's eight CPUs run 0xbe (PR #601's capture at 44eb3c2e, cpuinfo.txt: 8 processors, all `microcode : 0xbe`; kernel-log.txt has no `updated early`), which is Intel's newest for 06-8c-01/80 at microcode-20260925. Its IA32_PLATFORM_ID was never captured. - Where: the kernel, per CPU, in percpu::init_bsp after idt::init and in percpu::init_ap after control_regs::init, both before fpu::init. Read from the tree: init_bsp loads the IDT before fpu::init; init_ap runs before ROSTER.echo in ap_entry, and boot_aps waits on each echo before the next INIT-SIPI, which is the per-core serialisation SDM 3A §12.11.6.3 asks. cpu::wrmsr is declared `nomem`, which the update trigger is not. SDM §12.11.6.1: INIT keeps an update, a hard reset clears it. - Verified: Example 12-10's read-back; Linux 6.8's __apply_microcode (intel.c:304-330) does the same and returns UCODE_ERROR on a mismatch. - AMD: from Linux 6.8's amd.c (__apply_microcode_amd, cpu_has_entrysign, need_sha_check) and amd_shas.c. - Licence: src/licence.rs judges a committed file only once it ships, and LicenseRef-Intel-Microcode is in no ALLOWED row. - Exits in the ladder's order: host, metal (the T14, plus a boot-actuators negative control that raises only the header's revision so Intel's payload is untouched), metal no machine has yet, guest. TCG's model is qemu64 AuthenticAMD (toyos-cpuvuln's TCG fixture), so a guest boot loads nothing for want of a file, not for a hypervisor bit. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L --- ...s-linux-on-every-machine-toyos-supports.md | 2 +- .../the-kernel-loads-no-cpu-microcode.md | 75 +++++++++++++++++++ ...ernel-loads-cpu-microcode-is-the-owners.md | 14 ---- 3 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 issues/kernel/the-kernel-loads-no-cpu-microcode.md delete mode 100644 issues/kernel/whether-the-kernel-loads-cpu-microcode-is-the-owners.md diff --git a/issues/kernel/the-kernel-is-at-least-as-secure-as-linux-on-every-machine-toyos-supports.md b/issues/kernel/the-kernel-is-at-least-as-secure-as-linux-on-every-machine-toyos-supports.md index 6d7aa2f67a0..72bb264b81a 100644 --- a/issues/kernel/the-kernel-is-at-least-as-secure-as-linux-on-every-machine-toyos-supports.md +++ b/issues/kernel/the-kernel-is-at-least-as-secure-as-linux-on-every-machine-toyos-supports.md @@ -23,7 +23,7 @@ probe is a `boot-actuators` arm or a `test-actuators` `SYS_DEBUG` action. - `issues/kernel/user-pointer-checks-have-no-spectre-v1-fence-and-smap-is-optional.md` - `issues/kernel/indirect-branches-and-returns-run-without-thunks.md` - `issues/kernel/tsx-stays-as-firmware-left-it.md` -- `issues/kernel/whether-the-kernel-loads-cpu-microcode-is-the-owners.md` +- `issues/kernel/the-kernel-loads-no-cpu-microcode.md` - `issues/kernel/no-user-address-is-drawn-per-spawn.md` - `issues/kernel/the-kernel-has-no-stack-protector.md` - `issues/kernel/no-kernel-address-is-drawn-per-boot.md` diff --git a/issues/kernel/the-kernel-loads-no-cpu-microcode.md b/issues/kernel/the-kernel-loads-no-cpu-microcode.md new file mode 100644 index 00000000000..e0482a6e8fa --- /dev/null +++ b/issues/kernel/the-kernel-loads-no-cpu-microcode.md @@ -0,0 +1,75 @@ +--- +status: open +kind: defect +opened: 2026-09-29 +--- + +# The kernel loads no CPU microcode + +The kernel is to load CPU microcode signed by the CPU's maker, pinned by +version and hash the way vendor device firmware is (owner, 2026-09-30). It +loads none, so a CPU whose BIOS ships stale microcode stays below Linux at +`Ubuntu-6.8.0-142.142` on every line that rests on microcode. + +Root `CLAUDE.md`'s firmware rule admits this microcode once PR #636 lands. + +**Exit**: the kernel loads current microcode early on every CPU, at least as +current as Linux's. + +`toyos-microcode` validates an Intel update file and picks the update for one +CPU; nothing calls it. The T14's eight CPUs run 0xbe from its firmware, which +is Intel's newest for them at `microcode-20260925`, so a load there is a no-op. +Its `IA32_PLATFORM_ID` is uncaptured: platform 7 is inferred from the one +platform that file names. + +**Where.** The kernel, on every CPU, from a file it embeds per CPU ToyOS +supports on metal. Not the loader: it runs on the BSP alone, reaching the APs +takes EFI MP Services, and the kernel reads every CPU's revision anyway. In +`percpu::init_bsp` after `idt::init` and in `percpu::init_ap` after +`control_regs::init`, before `fpu::init` on each: after the IDT, so a load that +faults reports on this kernel's channels; before anything acts on an +enumeration an update changes (CPUID.7.0:EDX, `IA32_ARCH_CAPABILITIES`, RTM +and HLE); and before `ROSTER.echo`, so `boot_aps` starting one AP at a time is +the serialisation per core that SDM Vol. 3A §12.11.6.3 asks. A CPU with +CPUID.1:ECX[31] set loads nothing, as Linux does, and `IA32_PLATFORM_ID` is +read on a GenuineIntel CPU only. The update data starts 16-byte aligned (§12.11.6), +and the trigger is an `asm!` of its own: `cpu::wrmsr` is `nomem`, and the CPU +reads the update through this write. INIT keeps an update; a hard reset clears +it (§12.11.6.1). + +**Verified.** After the trigger the CPU writes 0 to `IA32_BIOS_SIGN_ID`, runs +CPUID.01H, and panics unless it reads back the update's revision (Example +12-10). After `boot_aps`, CPUs that report different revisions panic the boot. +Each CPU logs its platform, the revision it found and the one it runs. + +**AMD.** linux-firmware's `amd-ucode/microcode_amd_fam{17,19,1a}h.bin` is a +container (magic 0x00414d44): an equivalence table from CPUID.01H:EAX to a +processor ID, then patches. MSR C001_0020 takes a patch's address, and MSR 8B +must then read back its patch ID; family 0x17 also invalidates the patch's +pages (Linux `amd.c`, `__apply_microcode_amd`). On families 0x17, 0x19 and part +of 0x1a below a per-CPU cutoff revision the CPU's own signature check is broken +(EntrySign; `cpu_has_entrysign`, `need_sha_check`), so the hash pin is the only +check, as `amd_shas.c` is Linux's. linux-firmware's `LICENSE.amd-ucode` is +unread. ToyOS has no AMD metal: the nightly's EPYCs are KVM guests, which load +nothing. + +**Licence.** `LicenseRef-Intel-Microcode` is in no `ALLOWED` row of +`src/licence.rs`, so the commit that embeds the file reds the licence gate +until an exception scoped to CPU microcode admits it. Intel's first condition +puts the notice `NOTICE` quotes into that image. + +Each step's exit, in the testing ladder's order: + +- host: the step's decisions are pure in `toyos-microcode`, each refused by + name and each red under its mutation: a hypervisor or a vendor no file + covers, `select`, a read-back that is not the update's revision, CPUs that + disagree; +- metal: a T14 boot logs platform 7 and 0xbe current on all eight CPUs; a + `boot-actuators` arm that raises only the header's revision to 0xbf and + reseals its checksum stops that boot at the read-back or at a fault, since + Intel's payload still says 0xbe; +- metal, on no machine ToyOS has: the load arm, on a CPU whose firmware runs + older microcode than the embedded file; AMD's loader, on AMD metal; +- guest: every CPU logs why it loads nothing, a hypervisor under KVM and a + vendor no file covers under TCG's `AuthenticAMD` `qemu64`, and a guest test + asserts the line. diff --git a/issues/kernel/whether-the-kernel-loads-cpu-microcode-is-the-owners.md b/issues/kernel/whether-the-kernel-loads-cpu-microcode-is-the-owners.md deleted file mode 100644 index 1e6b8e4fef2..00000000000 --- a/issues/kernel/whether-the-kernel-loads-cpu-microcode-is-the-owners.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -status: owner -kind: question -opened: 2026-09-29 ---- - -# Whether the kernel loads CPU microcode is the owner's - -Microcode is firmware that runs on the CPU, which root `CLAUDE.md` does not -carve out: it admits only device firmware that never executes on the CPU. Until -the kernel loads it, a CPU whose BIOS ships stale microcode stays below Linux -at `Ubuntu-6.8.0-142.142` on every line that rests on microcode. - -**Exit**: the owner rules. From 38318d18ba3691d3034e0a71ef750ab13ee32530 Mon Sep 17 00:00:00 2001 From: japabu Date: Thu, 1 Oct 2026 08:11:52 +0200 Subject: [PATCH 3/7] toyos-microcode: dwords and extended signatures are read as fixed-size arrays The host gate's clippy (`-D warnings`, rust 1.98) refuses `chunks_exact` with a constant size (`clippy::chunks_exact_to_as_chunks`) at all four sites. `as_chunks::().0` yields the same chunks and drops the same remainder, and `sum` now reads each dword straight off its `[u8; 4]`. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L --- toyos-microcode/src/lib.rs | 6 +++--- toyos-microcode/src/tests.rs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/toyos-microcode/src/lib.rs b/toyos-microcode/src/lib.rs index 6183c278656..2427fbbebfc 100644 --- a/toyos-microcode/src/lib.rs +++ b/toyos-microcode/src/lib.rs @@ -95,7 +95,7 @@ impl<'a> Update<'a> { fn names(&self, cpu: &Cpu) -> bool { let primary = (dword(self.bytes, 12), dword(self.bytes, 24)); let table = self.bytes.get(HEADER + self.data + EXT_HEADER..).unwrap_or(&[]); - let extended = table.chunks_exact(EXT_SIGNATURE).map(|s| (dword(s, 0), dword(s, 4))); + let extended = table.as_chunks::().0.iter().map(|s| (dword(s, 0), dword(s, 4))); core::iter::once(primary) .chain(extended) .any(|(sig, flags)| sig == cpu.signature.0 && flags & cpu.platform.flag() != 0) @@ -210,7 +210,7 @@ fn parse(bytes: &[u8]) -> Result, Refusal> { // An extended signature, flags and checksum replace the header's // three in the update it stands for, so the two triples sum alike. let header = dword(bytes, 12).wrapping_add(dword(bytes, 16)).wrapping_add(dword(bytes, 24)); - for (index, s) in table[EXT_HEADER..].chunks_exact(EXT_SIGNATURE).enumerate() { + for (index, s) in table[EXT_HEADER..].as_chunks::().0.iter().enumerate() { if dword(s, 0).wrapping_add(dword(s, 4)).wrapping_add(dword(s, 8)) != header { return Err(Refusal::ExtendedSignatureChecksum { index }); } @@ -228,5 +228,5 @@ fn dword(bytes: &[u8], at: usize) -> u32 { /// Every dword of `bytes` summed, unsigned, with wrap (§12.11.5). fn sum(bytes: &[u8]) -> u32 { - bytes.chunks_exact(4).fold(0, |sum, w| sum.wrapping_add(dword(w, 0))) + bytes.as_chunks::<4>().0.iter().fold(0, |sum, &w| sum.wrapping_add(u32::from_le_bytes(w))) } diff --git a/toyos-microcode/src/tests.rs b/toyos-microcode/src/tests.rs index 5dbe50b82e6..b80ed5f7f07 100644 --- a/toyos-microcode/src/tests.rs +++ b/toyos-microcode/src/tests.rs @@ -36,8 +36,8 @@ fn build(signature: u32, flags: u32, revision: u32, extended: &[(u32, u32)]) -> let table = if extended.is_empty() { 0 } else { EXT_HEADER + EXT_SIGNATURE * extended.len() }; let data = 2048 - HEADER - table; let mut update = vec![0; 2048]; - for (i, word) in update[HEADER..HEADER + data].chunks_exact_mut(4).enumerate() { - word.copy_from_slice(&(i as u32).wrapping_mul(0x9e37_79b9).to_le_bytes()); + for (i, word) in update[HEADER..HEADER + data].as_chunks_mut::<4>().0.iter_mut().enumerate() { + *word = (i as u32).wrapping_mul(0x9e37_79b9).to_le_bytes(); } for (at, value) in [(0, 1), (4, revision), (12, signature), (20, 1), (24, flags)] { put(&mut update, at, value); From 76031de27b08a38e594494898ac7c722a6324683 Mon Sep 17 00:00:00 2001 From: japabu Date: Thu, 1 Oct 2026 08:57:37 +0200 Subject: [PATCH 4/7] toyos-microcode: no input can panic the parser, Intel's own extended table is tested, and Data Size 0 is refused Review round 1 of #653 found a mutant (`is_none_or` -> `is_some_and` at the extended-table size check) under which a 4..16-byte table that sums to 0 panicked at `table[EXT_HEADER..]`. The file is untrusted input, so the fix is structural rather than one more test: - The crate denies `clippy::indexing_slicing`, `arithmetic_side_effects`, `unwrap_used`, `expect_used`, `panic`, `panic_in_result_fn`, `unreachable`, `todo` and `unimplemented`, so `--clippy` refuses any future site that could panic on input. The tests allow them back: a test fails by panicking. - Every length is taken by a checked split whose failure is a `Refusal`: the header by `split_first_chunk`, data and table by `split_at_checked`, the extended table's header by `split_first_chunk`, so its entries exist only as the remainder of a table that held a header. The size check compares `count.checked_mul(12)` with the entries' length. - Header fields are read by destructuring a fixed `[u32; N]` out of a fixed `[u8; 4N]`; a mismatched N does not build. `Update` keeps the parsed revision, signature, flags, data and entries, so nothing re-reads bytes. Intel's `intel-ucode/06-cc-02` at microcode-20260925 (bdc92abe), unmodified, 165,888 bytes, sha256 4e43bb4d..., is committed with its NOTICE and COMMITTED_FILES rows: one update, revision 0x11c, flags 0x94, with four extended signatures. A test selects its last, 0xe0652, to Load below 0x11c. `build()` writes entry checksums with the formula the parser checks, so only Intel's bytes test that formula. Data Size 0 stands for 2000 bytes of data in updates for CPUs from long before ToyOS's 2020 floor; the arm and `DEFAULT_DATA` go, and Data Size 0 is refused as `ZeroDataSize`. An empty file is refused as truncated rather than answering `NoMatch`: a file with no update is not an Intel file. New tests kill the four survivors the review named: a table shorter than its header, a count naming fewer entries than the table holds, the T14's entry first in the extended table, and a Total Size of 2560. A valid 3072-byte update kills a 2048-byte granule. NOTICE: one section for `toyos-microcode/intel-ucode/*`; the copy of the notice and disclaimer goes (licenses/ carries it), as does the paragraph that restated the crate's doc. The issue loses the line about #636 and the sentence that pointed at that copy; `src/licence.rs` loses the comment that restated its row. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L --- NOTICE | 41 ++--- .../the-kernel-loads-no-cpu-microcode.md | 5 +- src/licence.rs | 8 +- toyos-microcode/intel-ucode/06-cc-02 | Bin 0 -> 165888 bytes toyos-microcode/src/lib.rs | 173 +++++++++++------- toyos-microcode/src/tests.rs | 100 +++++++--- 6 files changed, 198 insertions(+), 129 deletions(-) create mode 100644 toyos-microcode/intel-ucode/06-cc-02 diff --git a/NOTICE b/NOTICE index 19f74d82c3e..e01a3627bb3 100644 --- a/NOTICE +++ b/NOTICE @@ -366,14 +366,18 @@ and the file contents are ours. The tool is not distributed with this repository in any form. -toyos-microcode/intel-ucode/06-8c-01 — Intel microcode, redistributable unmodified ----------------------------------------------------------------------------------- - - 112,640 bytes, update revision 0xbe for processor signature 0x806c1, - processor flags 0x80 (Tiger Lake B0/B1, the T14's i5-1135G7) - sha256 efe83e312b90f7fe4b8f75260087edf03e048d2f4f80caef2ef631c842714bb3 +toyos-microcode/intel-ucode/* — Intel microcode, redistributable unmodified +--------------------------------------------------------------------------- + + 06-8c-01 112,640 bytes, update revision 0xbe for processor signature + 0x806c1, processor flags 0x80 (Tiger Lake B0/B1, the T14's + i5-1135G7) + sha256 efe83e312b90f7fe4b8f75260087edf03e048d2f4f80caef2ef631c842714bb3 + 06-cc-02 165,888 bytes, update revision 0x11c for processor signature + 0xc06c1, processor flags 0x94, and four extended signatures + sha256 4e43bb4d23c3638f8c16967d61e8f6456ae0da2ddd1da82ab579a50715147bb1 Upstream: https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files, - `intel-ucode/06-8c-01` at tag microcode-20260925 + `intel-ucode/` at tag microcode-20260925 (commit bdc92abe5c499c3fd7988b76a128d05c9120a520), byte for byte Licence text: licenses/Intel-microcode-license.txt (upstream's `license`, sha256 03efb1491c7e899feb2665fa299363e64035e5444c1b8bc1f6ebed30de964e12) @@ -392,26 +396,3 @@ three conditions, quoted: > > 3. No reverse engineering, decompilation, or disassembly of this software > is permitted. - -The copyright notice and disclaimer the first condition names: - - Copyright (c) 2018-2021 Intel Corporation. - All rights reserved. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - -`toyos-microcode` reads only what the SDM documents — the 48-byte header, the -checksums and the extended signature table (Vol. 3A §12.11) — and hands the -update data on whole; nothing here decodes, decompiles or disassembles it. No -image ships this file yet: when one does, the first condition puts the notice -above in the image beside it. diff --git a/issues/kernel/the-kernel-loads-no-cpu-microcode.md b/issues/kernel/the-kernel-loads-no-cpu-microcode.md index e0482a6e8fa..3b7b39bece6 100644 --- a/issues/kernel/the-kernel-loads-no-cpu-microcode.md +++ b/issues/kernel/the-kernel-loads-no-cpu-microcode.md @@ -11,8 +11,6 @@ version and hash the way vendor device firmware is (owner, 2026-09-30). It loads none, so a CPU whose BIOS ships stale microcode stays below Linux at `Ubuntu-6.8.0-142.142` on every line that rests on microcode. -Root `CLAUDE.md`'s firmware rule admits this microcode once PR #636 lands. - **Exit**: the kernel loads current microcode early on every CPU, at least as current as Linux's. @@ -55,8 +53,7 @@ nothing. **Licence.** `LicenseRef-Intel-Microcode` is in no `ALLOWED` row of `src/licence.rs`, so the commit that embeds the file reds the licence gate -until an exception scoped to CPU microcode admits it. Intel's first condition -puts the notice `NOTICE` quotes into that image. +until an exception scoped to CPU microcode admits it. Each step's exit, in the testing ladder's order: diff --git a/src/licence.rs b/src/licence.rs index e992ba5a747..31c42f0fd42 100644 --- a/src/licence.rs +++ b/src/licence.rs @@ -430,14 +430,18 @@ pub const COMMITTED_FILES: &[(&str, &str, &str, Terms)] = &[ "ours: a ToyOS binary this build produced (toyos-symbols/tests/real.rs)", Terms::Spdx("MIT OR Apache-2.0"), ), - // Intel's microcode update for the T14's CPU, unmodified; `NOTICE` carries - // the licence, its upstream tag and the digest. ( "toyos-microcode/intel-ucode/06-8c-01", "efe83e312b90f7fe4b8f75260087edf03e048d2f4f80caef2ef631c842714bb3", "NOTICE", Terms::Spdx("LicenseRef-Intel-Microcode"), ), + ( + "toyos-microcode/intel-ucode/06-cc-02", + "4e43bb4d23c3638f8c16967d61e8f6456ae0da2ddd1da82ab579a50715147bb1", + "NOTICE", + Terms::Spdx("LicenseRef-Intel-Microcode"), + ), ]; /// `NOTICE` sections that name no files, and why. diff --git a/toyos-microcode/intel-ucode/06-cc-02 b/toyos-microcode/intel-ucode/06-cc-02 new file mode 100644 index 0000000000000000000000000000000000000000..5ed9dad6f5fd16b1a5d5fb4ed8dad5f1af30d3fc GIT binary patch literal 165888 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%0DIduU6NV}HWk+^Ww%4dPvSgG#akeb#Qz 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�Q50r>_b{og?m0^!V7K|F&l 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

9WqDt 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 FQa9OWhcf^G literal 0 HcmV?d00001 diff --git a/toyos-microcode/src/lib.rs b/toyos-microcode/src/lib.rs index 2427fbbebfc..087eb9a71be 100644 --- a/toyos-microcode/src/lib.rs +++ b/toyos-microcode/src/lib.rs @@ -11,17 +11,32 @@ //! interpreted. //! //! Pure: no I/O, no allocation, no `unsafe`. The caller reads the CPU. +//! +//! The file is untrusted, so nothing here may panic on it. The lints below +//! refuse indexing, slicing, unchecked arithmetic, `unwrap`, `expect` and the +//! panicking macros; a std method that panics on a length, such as +//! `split_at`, no lint sees, so a length is taken only by a checked split +//! whose failure is a [`Refusal`]. #![no_std] #![forbid(unsafe_code)] +#![deny( + clippy::indexing_slicing, + clippy::arithmetic_side_effects, + clippy::unwrap_used, + clippy::expect_used, + clippy::panic, + clippy::panic_in_result_fn, + clippy::unreachable, + clippy::todo, + clippy::unimplemented +)] #[cfg(test)] mod tests; /// The header's length, and so the offset of the update data (Table 12-7). const HEADER: usize = 48; -/// The update data's length when the header's Data Size is 0 (Table 12-7). -const DEFAULT_DATA: usize = 2000; /// The extended signature table's header: count, checksum, 12 reserved bytes /// (Table 12-9). const EXT_HEADER: usize = 20; @@ -74,31 +89,34 @@ pub struct Cpu { /// One update out of a file, validated. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct Update<'a> { - /// Header, data and extended signature table: Total Size bytes. - bytes: &'a [u8], - data: usize, + revision: Revision, + signature: u32, + flags: u32, + data: &'a [u8], + extended: &'a [[u8; EXT_SIGNATURE]], } impl<'a> Update<'a> { pub fn revision(&self) -> Revision { - Revision(dword(self.bytes, 4) as i32) + self.revision } /// The update data. `IA32_BIOS_UPDT_TRIG` is written its linear address, /// which must be 16-byte aligned and mapped present (§12.11.6). pub fn data(&self) -> &'a [u8] { - &self.bytes[HEADER..HEADER + self.data] + self.data } /// The header's signature and flags, then each extended signature's /// (Examples 12-5 and 12-6). fn names(&self, cpu: &Cpu) -> bool { - let primary = (dword(self.bytes, 12), dword(self.bytes, 24)); - let table = self.bytes.get(HEADER + self.data + EXT_HEADER..).unwrap_or(&[]); - let extended = table.as_chunks::().0.iter().map(|s| (dword(s, 0), dword(s, 4))); - core::iter::once(primary) + let extended = self.extended.iter().map(|entry| { + let [signature, flags, _] = dwords(entry); + (signature, flags) + }); + core::iter::once((self.signature, self.flags)) .chain(extended) - .any(|(sig, flags)| sig == cpu.signature.0 && flags & cpu.platform.flag() != 0) + .any(|(signature, flags)| signature == cpu.signature.0 && flags & cpu.platform.flag() != 0) } } @@ -130,6 +148,9 @@ pub enum Refusal { HeaderVersion(u32), /// Loader Revision is not 1, the only loader §12.11.6 describes. LoaderRevision(u32), + /// Data Size is 0, which Table 12-7 reads as 2000 bytes: the form of + /// updates for CPUs older than any ToyOS runs on. + ZeroDataSize, /// Data Size is not a multiple of a dword. DataSize(usize), /// Total Size is not a multiple of 1024. @@ -148,82 +169,106 @@ pub enum Refusal { ExtendedSignatureChecksum { index: usize }, } -/// The update in `file` to load on `cpu`, or why there is none. +/// The update in `file` to load on `cpu`, or why there is none. A file holds +/// at least one update. pub fn select<'a>(file: &'a [u8], cpu: &Cpu) -> Result, Refused> { let mut newest: Option> = None; - let mut at = 0; - while at < file.len() { - let update = parse(&file[at..]).map_err(|why| Refused { at, why })?; - at += update.bytes.len(); - if update.names(cpu) && newest.is_none_or(|n| update.revision() > n.revision()) { + let mut rest = file; + loop { + // `rest` is a suffix of `file`. + let at = file.len().wrapping_sub(rest.len()); + let (update, after) = parse(rest).map_err(|why| Refused { at, why })?; + if update.names(cpu) && newest.is_none_or(|n| update.revision > n.revision) { newest = Some(update); } + if after.is_empty() { + break; + } + rest = after; } Ok(match newest { None => Choice::NoMatch, - Some(update) if update.revision() > cpu.revision => Choice::Load(update), - Some(update) => Choice::Current(update.revision()), + Some(update) if update.revision > cpu.revision => Choice::Load(update), + Some(update) => Choice::Current(update.revision), }) } -/// The update `bytes` starts with. -fn parse(bytes: &[u8]) -> Result, Refusal> { +/// The update `bytes` starts with, and the bytes after it. +fn parse(bytes: &[u8]) -> Result<(Update<'_>, &[u8]), Refusal> { let have = bytes.len(); - let header = bytes.get(..HEADER).ok_or(Refusal::Truncated { need: HEADER, have })?; - match dword(header, 0) { - 1 => {} - version => return Err(Refusal::HeaderVersion(version)), - } - match dword(header, 20) { - 1 => {} - loader => return Err(Refusal::LoaderRevision(loader)), - } - let (data, total) = match dword(header, 28) { - 0 => (DEFAULT_DATA, HEADER + DEFAULT_DATA), - size => (size as usize, dword(header, 32) as usize), - }; - if data % 4 != 0 { + let (header, rest) = + bytes.split_first_chunk::

().ok_or(Refusal::Truncated { need: HEADER, have })?; + let [version, revision, _, signature, checksum, loader, flags, data, total, ..]: [u32; 12] = + dwords(header); + if version != 1 { + return Err(Refusal::HeaderVersion(version)); + } + if loader != 1 { + return Err(Refusal::LoaderRevision(loader)); + } + let (data, total) = (data as usize, total as usize); + if data == 0 { + return Err(Refusal::ZeroDataSize); + } + if !data.is_multiple_of(4) { return Err(Refusal::DataSize(data)); } - if total % GRANULE != 0 { + if !total.is_multiple_of(GRANULE) { return Err(Refusal::TotalSize(total)); } - let table_len = total - .checked_sub(HEADER + data) + let table = HEADER + .checked_add(data) + .and_then(|signed| total.checked_sub(signed)) .ok_or(Refusal::TotalBelowData { total, data })?; - let bytes = bytes.get(..total).ok_or(Refusal::Truncated { need: total, have })?; + let truncated = Refusal::Truncated { need: total, have }; + let (data, rest) = rest.split_at_checked(data).ok_or(truncated)?; + let (table, rest) = rest.split_at_checked(table).ok_or(truncated)?; - match sum(&bytes[..HEADER + data]) { + match sum(header).wrapping_add(sum(data)) { 0 => {} sum => return Err(Refusal::Checksum(sum)), } - if table_len != 0 { - let table = &bytes[HEADER + data..]; - let count = table.get(..EXT_HEADER).map(|h| dword(h, 0) as usize); - if count.is_none_or(|n| table_len != EXT_HEADER + n * EXT_SIGNATURE) { - return Err(Refusal::ExtendedTableSize { len: table_len }); - } - match sum(table) { - 0 => {} - sum => return Err(Refusal::ExtendedTableChecksum(sum)), - } - // An extended signature, flags and checksum replace the header's - // three in the update it stands for, so the two triples sum alike. - let header = dword(bytes, 12).wrapping_add(dword(bytes, 16)).wrapping_add(dword(bytes, 24)); - for (index, s) in table[EXT_HEADER..].as_chunks::().0.iter().enumerate() { - if dword(s, 0).wrapping_add(dword(s, 4)).wrapping_add(dword(s, 8)) != header { - return Err(Refusal::ExtendedSignatureChecksum { index }); - } + let extended = match table { + [] => &[], + table => extended(table, signature.wrapping_add(checksum).wrapping_add(flags))?, + }; + let update = Update { revision: Revision(revision as i32), signature, flags, data, extended }; + Ok((update, rest)) +} + +/// The entries of an extended signature table whose update's header +/// signature, checksum and flags sum to `primary`. +fn extended(table: &[u8], primary: u32) -> Result<&[[u8; EXT_SIGNATURE]], Refusal> { + let size = Refusal::ExtendedTableSize { len: table.len() }; + let (header, entries) = table.split_first_chunk::().ok_or(size)?; + let [count, ..]: [u32; 5] = dwords(header); + if (count as usize).checked_mul(EXT_SIGNATURE) != Some(entries.len()) { + return Err(size); + } + match sum(table) { + 0 => {} + sum => return Err(Refusal::ExtendedTableChecksum(sum)), + } + let (entries, _) = entries.as_chunks::(); + // An extended signature, flags and checksum replace the header's three in + // the update it stands for, so the two triples sum alike. + for (index, entry) in entries.iter().enumerate() { + let [signature, flags, checksum] = dwords(entry); + if signature.wrapping_add(flags).wrapping_add(checksum) != primary { + return Err(Refusal::ExtendedSignatureChecksum { index }); } } - Ok(Update { bytes, data }) + Ok(entries) } -/// The little-endian dword at `at`. -fn dword(bytes: &[u8], at: usize) -> u32 { - let mut word = [0; 4]; - word.copy_from_slice(&bytes[at..at + 4]); - u32::from_le_bytes(word) +/// `bytes` as little-endian dwords; a `LEN` that is not `4 * N` does not build. +fn dwords(bytes: &[u8; LEN]) -> [u32; N] { + const { assert!(LEN == 4 * N) }; + let mut dwords = [0; N]; + for (dword, bytes) in dwords.iter_mut().zip(bytes.as_chunks::<4>().0) { + *dword = u32::from_le_bytes(*bytes); + } + dwords } /// Every dword of `bytes` summed, unsigned, with wrap (§12.11.5). diff --git a/toyos-microcode/src/tests.rs b/toyos-microcode/src/tests.rs index b80ed5f7f07..ffc9c616b0d 100644 --- a/toyos-microcode/src/tests.rs +++ b/toyos-microcode/src/tests.rs @@ -1,5 +1,14 @@ -//! The T14's own update as Intel publishes it, and updates built here to the -//! SDM's layout for every refusal and every arm the real file does not reach. +//! Intel's updates as Intel publishes them, and updates built here to the +//! SDM's layout for every refusal and every arm the real files do not reach. + +#![allow( + clippy::indexing_slicing, + clippy::arithmetic_side_effects, + clippy::unwrap_used, + clippy::expect_used, + clippy::panic, + reason = "a test fails by panicking" +)] extern crate std; @@ -11,6 +20,11 @@ use super::*; /// `intel-ucode/06-8c-01`, pinned by its digest in `NOTICE`. const T14_FILE: &[u8] = include_bytes!("../intel-ucode/06-8c-01"); +/// `intel-ucode/06-cc-02`, pinned by its digest in `NOTICE`: one update, +/// revision 0x11c, Data Size 0x2878c, flags 0x94, and an extended signature +/// table whose last entry is 0xe0652 with flags 0x94. +const CC02_FILE: &[u8] = include_bytes!("../intel-ucode/06-cc-02"); + /// The T14's i5-1135G7 at the revision its firmware loads. Its platform is /// the one platform the file's flags name. const T14: Cpu = Cpu { @@ -19,6 +33,10 @@ const T14: Cpu = Cpu { revision: Revision(0xbe), }; +fn get(bytes: &[u8], at: usize) -> u32 { + u32::from_le_bytes(bytes[at..at + 4].try_into().unwrap()) +} + fn put(bytes: &mut [u8], at: usize, value: u32) { bytes[at..at + 4].copy_from_slice(&value.to_le_bytes()); } @@ -46,7 +64,7 @@ fn build(signature: u32, flags: u32, revision: u32, extended: &[(u32, u32)]) -> put(&mut update, 32, 2048); reseal(&mut update, data); if table != 0 { - let header = dword(&update, 12).wrapping_add(dword(&update, 16)).wrapping_add(dword(&update, 24)); + let header = get(&update, 12).wrapping_add(get(&update, 16)).wrapping_add(get(&update, 24)); let at = HEADER + data; put(&mut update, at, extended.len() as u32); for (i, &(sig, flags)) in extended.iter().enumerate() { @@ -87,6 +105,17 @@ fn another_platform_or_stepping_is_not_named() { assert_eq!(select(T14_FILE, &stepping_2), Ok(Choice::NoMatch)); } +#[test] +fn an_extended_signature_in_intels_file_names_its_cpu() { + let below = Cpu { signature: Signature(0x000e_0652), platform: PlatformId(7), revision: Revision(0x11b) }; + let Ok(Choice::Load(update)) = select(CC02_FILE, &below) else { panic!("0x11c is newer than 0x11b") }; + assert_eq!(update.revision(), Revision(0x11c)); + assert!(update.data() == &CC02_FILE[HEADER..HEADER + 0x2878c], "the data is not the file's"); + let current = Cpu { revision: Revision(0x11c), ..below }; + assert_eq!(select(CC02_FILE, ¤t), Ok(Choice::Current(Revision(0x11c)))); + assert_eq!(select(CC02_FILE, &Cpu { platform: PlatformId(0), ..below }), Ok(Choice::NoMatch)); +} + #[test] fn the_msrs_are_read_where_the_sdm_puts_them() { assert_eq!(PlatformId::from_msr(7 << 50), PlatformId(7)); @@ -108,14 +137,18 @@ fn a_flipped_bit_anywhere_in_header_or_data_is_refused() { #[test] fn a_file_cut_short_is_refused() { - let len = T14_FILE.len(); - assert_eq!( - refusal(&T14_FILE[..len - 4]).why, - Refusal::Truncated { need: len, have: len - 4 } - ); + for file in [T14_FILE, CC02_FILE] { + let len = file.len(); + assert_eq!(refusal(&file[..len - 4]).why, Refusal::Truncated { need: len, have: len - 4 }); + } assert_eq!(refusal(&T14_FILE[..HEADER - 1]).why, Refusal::Truncated { need: HEADER, have: HEADER - 1 }); } +#[test] +fn an_empty_file_is_refused() { + assert_eq!(refusal(&[]), Refused { at: 0, why: Refusal::Truncated { need: HEADER, have: 0 } }); +} + #[test] fn a_malformed_update_after_a_good_one_refuses_the_file() { let mut file = T14_FILE.to_vec(); @@ -134,10 +167,12 @@ fn a_header_or_loader_version_other_than_1_is_refused() { } #[test] -fn sizes_off_their_granule_or_inside_out_are_refused() { - let cases: [(u32, u32, Refusal); 3] = [ +fn a_size_zero_off_its_granule_or_inside_out_is_refused() { + let cases: [(u32, u32, Refusal); 5] = [ + (0, 0, Refusal::ZeroDataSize), (1998, 2048, Refusal::DataSize(1998)), (2000, 2047, Refusal::TotalSize(2047)), + (2000, 2560, Refusal::TotalSize(2560)), (3024, 2048, Refusal::TotalBelowData { total: 2048, data: 3024 }), ]; for (data, total, why) in cases { @@ -149,20 +184,24 @@ fn sizes_off_their_granule_or_inside_out_are_refused() { } #[test] -fn a_zero_data_size_is_2000_bytes_of_data() { +fn any_multiple_of_1024_is_a_total_size() { let mut update = build(T14.signature.0, 0x80, 0xc0, &[]); - put(&mut update, 28, 0); - put(&mut update, 32, 0); - reseal(&mut update, 2000); - let Ok(Choice::Load(loaded)) = select(&update, &T14) else { panic!("0xc0 is newer than 0xbe") }; - assert_eq!(loaded.data().len(), 2000); + update.resize(3072, 0); + put(&mut update, 28, 3072 - HEADER as u32); + put(&mut update, 32, 3072); + reseal(&mut update, 3072 - HEADER); + assert!(matches!(select(&update, &T14), Ok(Choice::Load(_)))); } #[test] fn an_extended_signature_names_a_cpu_the_header_does_not() { - let update = build(0x0009_06a3, 0x80, 0xc0, &[(0x0008_06c2, 0x01), (T14.signature.0, 0x80)]); - let Ok(Choice::Load(loaded)) = select(&update, &T14) else { panic!("the second entry names the T14") }; - assert_eq!(loaded.data().len(), 2048 - HEADER - EXT_HEADER - 2 * EXT_SIGNATURE); + let other = (0x0008_06c2, 0x01); + let t14 = (T14.signature.0, 0x80); + for extended in [[other, t14], [t14, other]] { + let update = build(0x0009_06a3, 0x80, 0xc0, &extended); + let Ok(Choice::Load(loaded)) = select(&update, &T14) else { panic!("an entry names the T14") }; + assert_eq!(loaded.data().len(), 2048 - HEADER - EXT_HEADER - 2 * EXT_SIGNATURE); + } let wrong_platform = build(0x0009_06a3, 0x80, 0xc0, &[(T14.signature.0, 0x01)]); assert_eq!(select(&wrong_platform, &T14), Ok(Choice::NoMatch)); } @@ -174,7 +213,7 @@ fn a_damaged_extended_table_is_refused() { let mut entry = good.clone(); let signature = at + EXT_HEADER + EXT_SIGNATURE; - let (sig, sum) = (dword(&entry, signature), dword(&entry, at + 4)); + let (sig, sum) = (get(&entry, signature), get(&entry, at + 4)); put(&mut entry, signature, sig + 1); put(&mut entry, at + 4, sum.wrapping_sub(1)); assert_eq!(refusal(&entry).why, Refusal::ExtendedSignatureChecksum { index: 1 }); @@ -183,10 +222,18 @@ fn a_damaged_extended_table_is_refused() { table[at + 8] ^= 1; assert_eq!(refusal(&table).why, Refusal::ExtendedTableChecksum(1)); - let mut count = good; - put(&mut count, at, 3); - let len = EXT_HEADER + 2 * EXT_SIGNATURE; - assert_eq!(refusal(&count).why, Refusal::ExtendedTableSize { len }); + for count in [1, 3] { + let mut wrong = good.clone(); + put(&mut wrong, at, count); + let len = EXT_HEADER + 2 * EXT_SIGNATURE; + assert_eq!(refusal(&wrong).why, Refusal::ExtendedTableSize { len }, "count {count}"); + } + + let mut short = build(T14.signature.0, 0x80, 0xc0, &[]); + put(&mut short, 28, 1984); + short[2032..].fill(0); + reseal(&mut short, 1984); + assert_eq!(refusal(&short).why, Refusal::ExtendedTableSize { len: 16 }); } #[test] @@ -205,8 +252,3 @@ fn a_revision_is_signed() { let cpu = Cpu { revision: Revision(0x7fff_ffff), ..T14 }; assert_eq!(select(&negative, &cpu), Ok(Choice::Current(Revision(i32::MIN)))); } - -#[test] -fn an_empty_file_names_nobody() { - assert_eq!(select(&[], &T14), Ok(Choice::NoMatch)); -} From 3eec567ab321aa917bfa8841f233397eca0d9441 Mon Sep 17 00:00:00 2001 From: japabu Date: Thu, 1 Oct 2026 10:03:57 +0200 Subject: [PATCH 5/7] toyos-microcode: bytes short of a header after the last update are tested refused; the T14's platform is read The review of 76031de27 found that `if after.is_empty()` in `select` could become `if after.len() < HEADER` with all 16 tests green: a file followed by 1 to 47 bytes would then be accepted. The parser already refuses it as `Truncated { need: 48, have: n }`, the refusal of an update whose header the bytes end inside, so the gap was the test. `a_malformed_update_after_a_good_one_refuses_the_file` now appends every length from 1 to 47 to the T14's file and expects that refusal at the file's end. The module doc no longer calls the denied macros "the panicking macros": it names them, and names what no lint sees, `assert!` and shifts, beside the std methods that panic on a length. The one shift on a runtime value, `PlatformId::flag`, carries its invariant. The T14's `IA32_PLATFORM_ID` is now read (0x001c000000000000 on all eight CPUs, orchestrator's measurement on PR #653), so the MSR test decodes that reading to platform 7, and the inference is deleted from the test fixture and the issue. The issue says why a CPU that does not take its update stops the boot rather than running the firmware's revision. NOTICE no longer quotes Intel's conditions: they are in licenses/Intel-microcode-license.txt, which the section names, and the quote's "the above copyright notice" pointed at nothing. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L --- NOTICE | 14 -------------- issues/kernel/the-kernel-loads-no-cpu-microcode.md | 8 +++++--- toyos-microcode/src/lib.rs | 10 ++++++---- toyos-microcode/src/tests.rs | 10 +++++++--- 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/NOTICE b/NOTICE index e01a3627bb3..f85c9717ad4 100644 --- a/NOTICE +++ b/NOTICE @@ -382,17 +382,3 @@ toyos-microcode/intel-ucode/* — Intel microcode, redistributable unmodified Licence text: licenses/Intel-microcode-license.txt (upstream's `license`, sha256 03efb1491c7e899feb2665fa299363e64035e5444c1b8bc1f6ebed30de964e12) SPDX-License-Identifier: LicenseRef-Intel-Microcode - -Intel's terms permit redistribution in binary form without modification, on -three conditions, quoted: - -> 1. Redistributions must reproduce the above copyright notice and the -> following disclaimer in the documentation and/or other materials provided -> with the distribution. -> -> 2. Neither the name of Intel Corporation nor the names of its suppliers may -> be used to endorse or promote products derived from this software without -> specific prior written permission. -> -> 3. No reverse engineering, decompilation, or disassembly of this software -> is permitted. diff --git a/issues/kernel/the-kernel-loads-no-cpu-microcode.md b/issues/kernel/the-kernel-loads-no-cpu-microcode.md index 3b7b39bece6..42853c1581d 100644 --- a/issues/kernel/the-kernel-loads-no-cpu-microcode.md +++ b/issues/kernel/the-kernel-loads-no-cpu-microcode.md @@ -17,8 +17,6 @@ current as Linux's. `toyos-microcode` validates an Intel update file and picks the update for one CPU; nothing calls it. The T14's eight CPUs run 0xbe from its firmware, which is Intel's newest for them at `microcode-20260925`, so a load there is a no-op. -Its `IA32_PLATFORM_ID` is uncaptured: platform 7 is inferred from the one -platform that file names. **Where.** The kernel, on every CPU, from a file it embeds per CPU ToyOS supports on metal. Not the loader: it runs on the BSP alone, reaching the APs @@ -38,7 +36,11 @@ it (§12.11.6.1). **Verified.** After the trigger the CPU writes 0 to `IA32_BIOS_SIGN_ID`, runs CPUID.01H, and panics unless it reads back the update's revision (Example 12-10). After `boot_aps`, CPUs that report different revisions panic the boot. -Each CPU logs its platform, the revision it found and the one it runs. +Each CPU logs its platform, the revision it found and the one it runs. It +stops rather than run the firmware's revision behind a log line: the file is +pinned and chosen by the CPU's own signature, platform and revision, so a CPU +that does not take it means one of those is wrong, a ToyOS defect, and a boot +that went on would run below the revision its image claims with nothing red. **AMD.** linux-firmware's `amd-ucode/microcode_amd_fam{17,19,1a}h.bin` is a container (magic 0x00414d44): an equivalence table from CPUID.01H:EAX to a diff --git a/toyos-microcode/src/lib.rs b/toyos-microcode/src/lib.rs index 087eb9a71be..c39a81fb5f7 100644 --- a/toyos-microcode/src/lib.rs +++ b/toyos-microcode/src/lib.rs @@ -13,10 +13,11 @@ //! Pure: no I/O, no allocation, no `unsafe`. The caller reads the CPU. //! //! The file is untrusted, so nothing here may panic on it. The lints below -//! refuse indexing, slicing, unchecked arithmetic, `unwrap`, `expect` and the -//! panicking macros; a std method that panics on a length, such as -//! `split_at`, no lint sees, so a length is taken only by a checked split -//! whose failure is a [`Refusal`]. +//! refuse indexing, slicing, unchecked arithmetic, `unwrap`, `expect`, +//! `panic!`, `unreachable!`, `todo!` and `unimplemented!`. No lint sees +//! `assert!`, a shift, or a std method that panics on a length, such as +//! `split_at`: a length is taken only by a checked split whose failure is a +//! [`Refusal`], and no `assert!` or shift takes an operand from the file. #![no_std] #![forbid(unsafe_code)] @@ -61,6 +62,7 @@ impl PlatformId { } const fn flag(self) -> u32 { + // `self.0` < 8: the field is private and `from_msr` masks it. 1 << self.0 } } diff --git a/toyos-microcode/src/tests.rs b/toyos-microcode/src/tests.rs index ffc9c616b0d..506f1a5018b 100644 --- a/toyos-microcode/src/tests.rs +++ b/toyos-microcode/src/tests.rs @@ -25,8 +25,7 @@ const T14_FILE: &[u8] = include_bytes!("../intel-ucode/06-8c-01"); /// table whose last entry is 0xe0652 with flags 0x94. const CC02_FILE: &[u8] = include_bytes!("../intel-ucode/06-cc-02"); -/// The T14's i5-1135G7 at the revision its firmware loads. Its platform is -/// the one platform the file's flags name. +/// The T14's i5-1135G7 at the revision its firmware loads. const T14: Cpu = Cpu { signature: Signature(0x0008_06c1), platform: PlatformId(7), @@ -118,7 +117,8 @@ fn an_extended_signature_in_intels_file_names_its_cpu() { #[test] fn the_msrs_are_read_where_the_sdm_puts_them() { - assert_eq!(PlatformId::from_msr(7 << 50), PlatformId(7)); + // `IA32_PLATFORM_ID` as all eight of the T14's CPUs read it. + assert_eq!(PlatformId::from_msr(0x001c_0000_0000_0000), PlatformId(7)); assert_eq!(PlatformId::from_msr(!(7 << 50)), PlatformId(0)); assert_eq!(Revision::from_sign_id(0xbe << 32 | 0xffff_ffff), Revision(0xbe)); } @@ -154,6 +154,10 @@ fn a_malformed_update_after_a_good_one_refuses_the_file() { let mut file = T14_FILE.to_vec(); file.extend_from_slice(&[0; HEADER]); assert_eq!(refusal(&file), Refused { at: T14_FILE.len(), why: Refusal::HeaderVersion(0) }); + for have in 1..HEADER { + let why = Refusal::Truncated { need: HEADER, have }; + assert_eq!(refusal(&file[..T14_FILE.len() + have]), Refused { at: T14_FILE.len(), why }); + } } #[test] From e2cd276827c0e6938946e15f8e4c95b72d7fddf5 Mon Sep 17 00:00:00 2001 From: japabu Date: Thu, 1 Oct 2026 10:05:47 +0200 Subject: [PATCH 6/7] toyos-microcode: the module doc says which assertions the lints refuse `clippy::panic_in_result_fn` refuses an `assert!` in `parse` (clippy exit 101), and refuses nothing in `Update::names`, which returns `bool` (clippy exit 0, the test red). A shift by a header field also passes clippy with exit 0. The doc now says the deny list covers an assertion in a function returning `Result` and nothing else, so it no longer claims `assert!` is invisible to the lints. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016t9wjdQkB8SH7bmfUoiy6L --- toyos-microcode/src/lib.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/toyos-microcode/src/lib.rs b/toyos-microcode/src/lib.rs index c39a81fb5f7..837656a1393 100644 --- a/toyos-microcode/src/lib.rs +++ b/toyos-microcode/src/lib.rs @@ -14,10 +14,11 @@ //! //! The file is untrusted, so nothing here may panic on it. The lints below //! refuse indexing, slicing, unchecked arithmetic, `unwrap`, `expect`, -//! `panic!`, `unreachable!`, `todo!` and `unimplemented!`. No lint sees -//! `assert!`, a shift, or a std method that panics on a length, such as -//! `split_at`: a length is taken only by a checked split whose failure is a -//! [`Refusal`], and no `assert!` or shift takes an operand from the file. +//! `panic!`, `unreachable!`, `todo!` and `unimplemented!`, and any assertion +//! in a function returning `Result`. No lint sees a shift, an `assert!` +//! elsewhere, or a std method that panics on a length, such as `split_at`: a +//! length is taken only by a checked split whose failure is a [`Refusal`], and +//! no shift or `assert!` takes an operand from the file. #![no_std] #![forbid(unsafe_code)] From 84d8abe383f7b763ace73a8f777b882ff573f1eb Mon Sep 17 00:00:00 2001 From: japabu Date: Fri, 2 Oct 2026 10:28:28 +0200 Subject: [PATCH 7/7] toyos-microcode: the module doc keeps the invariant alone; the issue names what reds the licence gate Round 3's named changes (review comment 5947995633). The module doc's sentence listing what the lints refuse restated the deny list under it and goes. Its rule that no shift or `assert!` takes an operand from the file is short of the invariant: `(revision as i32).abs()` in `parse` passes `cargo clippy -p toyos-microcode --all-targets -- -D warnings` (exit 0) and panics `a_revision_is_signed` with "attempt to negate with overflow" (`cargo test -p toyos-microcode`, exit 101), so a std integer method that panics on a value is a route neither the lints nor the rule covered. The rule goes, and with both sentences gone the list of what no lint sees between them has no antecedent and is short by the same measurement, so it goes too. What stays is the invariant: nothing here may panic on the file. The issue said the commit that embeds the file reds the licence gate. The gate ships a committed file once a shipped package's directory holds it, so the trigger is the kernel's dependency on the crate, and it reds both rows. Measured: with `toyos-microcode = { path = "../toyos-microcode" }` added to kernel/Cargo.toml and its lock and nothing embedded, `cargo run -- --ci host` exits 1 with one step of 59 red, "the licences of what ships: 2 refusal(s)", naming 06-8c-01 and 06-cc-02. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013UDZQ6fSKw14e4w2TKTRfm --- issues/kernel/the-kernel-loads-no-cpu-microcode.md | 7 +++++-- toyos-microcode/src/lib.rs | 8 +------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/issues/kernel/the-kernel-loads-no-cpu-microcode.md b/issues/kernel/the-kernel-loads-no-cpu-microcode.md index 42853c1581d..3003800d615 100644 --- a/issues/kernel/the-kernel-loads-no-cpu-microcode.md +++ b/issues/kernel/the-kernel-loads-no-cpu-microcode.md @@ -54,8 +54,11 @@ unread. ToyOS has no AMD metal: the nightly's EPYCs are KVM guests, which load nothing. **Licence.** `LicenseRef-Intel-Microcode` is in no `ALLOWED` row of -`src/licence.rs`, so the commit that embeds the file reds the licence gate -until an exception scoped to CPU microcode admits it. +`src/licence.rs`, and a committed file ships once a shipped package's directory +holds it. So the commit that makes the kernel depend on `toyos-microcode` reds +the licence gate on both files under `toyos-microcode/intel-ucode/`, the +test-only `06-cc-02` included, whatever the kernel embeds, until an exception +scoped to CPU microcode admits them. Each step's exit, in the testing ladder's order: diff --git a/toyos-microcode/src/lib.rs b/toyos-microcode/src/lib.rs index 837656a1393..0f5d0907164 100644 --- a/toyos-microcode/src/lib.rs +++ b/toyos-microcode/src/lib.rs @@ -12,13 +12,7 @@ //! //! Pure: no I/O, no allocation, no `unsafe`. The caller reads the CPU. //! -//! The file is untrusted, so nothing here may panic on it. The lints below -//! refuse indexing, slicing, unchecked arithmetic, `unwrap`, `expect`, -//! `panic!`, `unreachable!`, `todo!` and `unimplemented!`, and any assertion -//! in a function returning `Result`. No lint sees a shift, an `assert!` -//! elsewhere, or a std method that panics on a length, such as `split_at`: a -//! length is taken only by a checked split whose failure is a [`Refusal`], and -//! no shift or `assert!` takes an operand from the file. +//! The file is untrusted, so nothing here may panic on it. #![no_std] #![forbid(unsafe_code)]