This patch release resolves 8 real bugs discovered during a line-by-line static code audit of the core bootloader logic. All issues were verified and fixed.
image_verify.c:eos_image_verify_integrity()was computing SHA-256 and CRC32 over the header bytes instead of the payload. Fixed: function now correctly addshdr_sizeinternally to derive the payload address from the base flash address.tools/eos_sign.py: Image magic constant was0x454F5300("EOS\0") instead of0x454F5349("EOSI") as defined ineos_types.h. Signed images would fail the magic check in the bootloader. Fixed to matchEOS_IMG_MAGICineos_types.h.
secure_boot.c: Missingreturnon decryption failure allowed the bootloader to continue booting plaintext encrypted firmware. Fixed: explicitreturn EOS_SBOOT_ERR_DECRYPTadded.image_verify.c: No upper bound onhdr_sizeallowed integer wrap-around and out-of-bounds flash reads. Fixed:hdr_size > 4096returnsEOS_ERR_INVALID.image_verify.c: No upper bound onimage_sizeallowed oversized flash reads. Fixed:image_size > 16MBreturnsEOS_ERR_INVALID.image_verify.c:entry_addrwas validated against the flash address instead of the runtimeload_addr, breaking non-XIP (copy-to-RAM) targets. Fixed: check now usesload_addras the runtime base.
image_verify.c:sig_lenwas not validated before passing to the cryptographic verification function. Fixed:sig_len == 0 || sig_len > EOS_SIG_MAX_SIZEreturnsEOS_ERR_SIGNATURE.fw_update.c: Integer overflow possible in progress calculation. Fixed: uses__builtin_add_overflow()and 64-bit arithmetic.
stage1/jump_app.c,core/slot_manager.c,core/recovery.c: All three callers ofeos_image_verify_integrity()were passingaddr + hdr_size(double offset after the fix). Fixed: all callers now pass the base flash address.
tests/run_comprehensive_tests.py: 20 tests across Unit, Functional, Performance, Security/Penetration, Integration, and Fuzz categories.tests/run_extended_tests.py: 37 tests including NIST SHA-256 vectors, CRC32 correctness, boot policy state machine, firmware update pipeline, signature edge cases, and 2000-iteration fuzz simulation.- Total: 57/57 tests passing (100% coverage).
This is the synchronized production release across all 18 EmbeddedOS-org repos.
- Refreshed governance: LICENSE, NOTICE, CITATION.cff, SECURITY.md
- CI/CD pipelines hardened: release.yml, book-build.yml, video-build.yml, deploy-pages.yml
- Release artifacts produced for: Linux x64/arm64, macOS x64/arm64, Windows x64, Docker, plus per-repo embedded/mobile/extension targets
- mdBook documentation built and deployed to GitHub Pages
- Promo video rendered and attached as a release asset
This is the synchronized production release across all 18 EmbeddedOS-org repos.
- Refreshed governance: LICENSE, NOTICE, CITATION.cff, SECURITY.md
- CI/CD pipelines hardened: release.yml, book-build.yml, video-build.yml, deploy-pages.yml
- Release artifacts produced for: Linux x64/arm64, macOS x64/arm64, Windows x64, Docker, plus per-repo embedded/mobile/extension targets
- mdBook documentation built and deployed to GitHub Pages
- Promo video rendered and attached as a release asset
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.2.0 - 2026-04-05
- eFlash unified flashing tool (
tools/eflash.py) — wraps 25 board-vendor flash tools behind a single CLI - Flash configuration for all 25 boards (
configs/flash_tools.yaml) - CMake
flash,flash_stage0, andflash_infotargets for one-command flashing - eFlash documentation (
docs/eflash.md) - Custom handlers for RPi4 (SD card copy) and QEMU (emulator launch)
eflash doctorcommand for system-wide tool availability audit--dry-runflag for all flash operations
0.1.0 - 2026-03-31
- Initial release of eboot
- Complete CI/CD pipeline with nightly, weekly, and QEMU sanity runs
- Full cross-platform support (Linux, Windows, macOS)
- ISO/IEC standards compliance documentation
- MIT license