Skip to content

v0.4.35

Choose a tag to compare

@github-actions github-actions released this 31 Oct 18:54
· 11 commits to main since this release

v0.4.35 — Linux & macOS support, ME-clean reporting made verifiable, UEFI LZMA decode hardened

Platform support

  • CI now builds and tests on Linux (tarball) and macOS (Apple Silicon .dmg) in addition to Windows:
    • BIOSRecoverySuite-linux-x64-<v>.tar.gz — unpack and run ./BIOSRecoverySuite
    • BIOSRecoverySuite-macos-arm64-<v>.dmg
    • Windows keeps the signed Setup.exe (Ed25519 .sig) and portable.zip.
  • Test suite now runs on Linux (3.10/3.11/3.12) and macOS (3.12); the CI release flow is race-safe (release is created once, all platforms upload in parallel; tag/version enforced before any build).

ME Cleaner: what a CSME 11+ "CSE LT" clean really is (and what the report states)

For engines that ship the $CPD manifest layout (CSME 11+, incl. the CSME 15 Tiger Lake code in Lenovo P14s/T14 Gen 2–4), partition-level ME removal does not exist: the FPT lists no FTPR at all, and me_cleaner itself exits with "FTPR header not found" on such images. The app's MeCleaner therefore performs the exact same operation as me_cleaner's own gen-3 HAP path — and now says so precisely:

  • Cleaned Size keeps the region size (nothing is truncated; LT engines cannot be partition-cleaned);
  • the report names the one and only changed byte and bit: bit 16 of PCHSTRP0 (the flash-strap dword at FPSBA), byte-identical in location and effect to me_cleaner's HAP write;
  • if you run a clean and the report shows anything less, that is an app bug; if it shows exactly that one-bit change, that is the full, proper ME clean for this engine generation.
    (Reference analysis and me_cleaner source comparison are in docs/RESEARCH.md.)

UEFI LZMA sections: hardened decode path

  • LZMA-ALONE payloads are now decoded (and re-emitted) the way the firmware's own LzmaDecode does: props/lc/lp/pb + dictionary size read from the header, EOS marker accepted, declared output size from ALONE header bytes 5..12 — matching EDK2's LzmaDecompress.c.
  • Host-side strict lzma.decompress() is no longer used on LZMA sections in the app (its tolerance for "declared size + EOS tail" differs per liblzma build); the shipped payload format remains exactly the one the platform firmware accepts when flashing.
  • Oversized/under-decodable streams stay bounded per the previous audit (a stream that cannot finish inside the limit is treated as opaque, not crashed through).

Notes

  • 685 tests, ruff clean; CI green on all three platforms.
  • The Windows installer is signed (Ed25519, .sig).