Correct the dm-verity and secure-boot claims - #491
Conversation
The security pages described dm-verity as shipped and universal. filesystem-integrity.md told customers every read is verified against a Merkle hash tree with the roothash signed into the boot chain, and features.md said a single altered bit is detected in every extension. Nothing implements it: meta-avocado has no veritysetup call, no roothash generation and no verity device activation in any recipe, class or script, and the one dm-verity artifact is a kernel fragment that sets CONFIG_DM_VERITY=y while disabling CONFIG_PKCS7_MESSAGE_PARSER, so a signed roothash could not be verified even if a hash tree existed. Someone building a compliance answer from these pages would be citing a control the product does not have. Describe what the product does have: a read-only erofs root that nothing at runtime can rewrite, update payloads checked against signed metadata before they install, and A/B slots that roll back rather than leave a half-written root. That is a weaker guarantee than per-block verification, and it is the one we can stand behind. dm-verity stays on the page as an explicit roadmap section naming what changes when it lands, so a reader evaluating the gap can see it there instead of finding the feature silently deleted. Two corrections ride along as the same claim from another angle: the root filesystem is erofs, not the SquashFS three pages named, and per-extension "independently signed and verified" narrows to build-time KAB signing, which authenticates the producer rather than the blocks. The i.MX93 field note repeats these claims and is left alone here; #477 is already open against that file and carries its verification-status caution. Signed-off-by: Javier Tia <javier@peridio.com>
The page documented a CLI surface that does not exist and a capability no target has. `avocado secure-boot enable` was the headline code block; the string `secure-boot` appears nowhere in avocado-cli and the binary's help lists no such subcommand. The fuse-provisioning section said `avocado provision` programs fuses as part of the flow; that command is a shortcut to `runtime provision`, touches no fuses, and no board layer carries fuse-burning tooling either. The frontmatter and tagline sold the whole thing as configured out of the box across four vendor families, when no target enforces a boot chain at all. Describe the real shape, which is a build-time story rather than a CLI one. `secureboot` is a distro feature that is already on by default and generates the per-machine UEFI key chain; whether a bootloader then enforces a signature is per-silicon and configured per board. Enforcement gets a caution naming where it actually stands, i.MX 93 in development and nothing else started, because a reader deciding whether Avocado meets a security requirement needs that answer and previously got the opposite one. Two claims survive on their merits and are stated more precisely rather than cut. Signing-key management is real and good: `avocado signing-keys` registers keys, including ones generated inside a PKCS#11 token so the private half never leaves the device, which is what makes the multi-vendor signing story true. That section keeps its substance and loses only "end-to-end chain of trust", since there is no verified chain for the signatures to hang off yet. The fuse section gains a warning it should always have carried. Burning is irreversible, a wrong value is unrecoverable, and the byte order a vendor tool expects does not always match the order the key hash is printed in. We lost a board to exactly that. Also corrects a claim this branch nearly introduced instead: the public certificates do not reach the target. `key-store.bb` would install them under /usr/share/avocado/sb-keys, but nothing references the recipe, so no image contains it. Signed-off-by: Javier Tia <javier@peridio.com>
a5e2f42 to
a18df89
Compare
There was a problem hiding this comment.
Pull request overview
This PR corrects customer-facing security documentation that previously claimed shipped dm-verity and secure-boot capabilities that are not implemented, reframing the docs around the integrity and key-management properties that exist today and explicitly scoping dm-verity / enforcement as future work.
Changes:
- Rewrites the Secure Boot and Filesystem Integrity pages to accurately describe today’s guarantees (immutability + signature verification at install/update time) and to clearly call out what is not enforced yet.
- Updates overview/security collateral to remove or qualify dm-verity and “verified chain through extensions” claims, and corrects several root filesystem format references to erofs.
- Adjusts hardware target pages and related overview pages to align their security messaging with the updated scope.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/docs-overview/security/secure-boot.md | Replaces non-existent CLI flow with build-time configuration + key management; adds explicit enforcement-status caution. |
| src/docs-overview/security/filesystem-integrity.md | Reframes integrity around immutable erofs + signed metadata verification + A/B rollback; keeps dm-verity as explicit roadmap. |
| src/docs-overview/security/atomic-update-architecture.md | Updates verification step to reflect signed-metadata/hash+length checks instead of dm-verity verification. |
| src/docs-overview/security/hardware-backed-encryption.md | Removes dm-verity-as-shipped wording; points integrity discussion back to filesystem integrity page. |
| src/docs-overview/security/production-ready-features.md | Replaces dm-verity mentions with “immutable signature-verified root” framing; updates immutable core description to erofs + install-time verification. |
| src/docs-overview/features.md | Removes claims that sysext/confext “inherit dm-verity” and that the secure boot chain extends through extensions; clarifies current verification boundaries. |
| src/docs-overview/core-concepts.mdx | Updates extension description to immutable/signable images rather than dm-verity inheritance. |
| src/docs-overview/about.mdx | Updates extension bullet to remove dm-verity-signed phrasing (but still contains a rootfs-format inconsistency needing adjustment). |
| src/docs-hardware/stmicroelectronics/stm32mp257f-dk/index.mdx | Updates board “Production Security” blurb to remove dm-verity claim. |
| src/docs-hardware/nvidia/jetson-orin-nano-developer-kit/index.mdx | Updates board “Production Security” blurb to remove dm-verity claim. |
| src/docs-hardware/intel/x86-64-v3/index.mdx | Corrects root filesystem format claim to “immutable read-only erofs”. |
| src/docs-hardware/intel/x86-64-v2/index.mdx | Corrects root filesystem format claim to “immutable read-only erofs”. |
Suppressed comments (1)
src/docs-overview/security/production-ready-features.md:121
- This section still claims each extension is "independently signed" and "independently verified". That contradicts the updated security pages in this PR (and the secure boot page’s note) that per-extension verification before overlay is not enabled yet. Reword to match the shipped behavior (immutable images, optional signing at build time).
The read-only root filesystem prevents runtime modification of system binaries, libraries, and configuration. Even with root access in production mode, the read-only erofs root cannot be written to. Combined with signature verification at install time, this means the system running in the field is the system that was built and signed, short of the storage medium being modified offline.
### Extension isolation
System extensions overlay onto the immutable root but maintain clear boundaries. Each extension is independently signed, independently verified, and independently updatable. A compromised application extension cannot modify the core OS or other extensions — the overlay architecture enforces this structurally, not just by policy.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| - **Yocto-built package feeds** — RPM packages per architecture and target. Resolved by DNF5. Versioned and immutable. | ||
| - **Composable extensions** — systemd-sysext and confext. dm-verity signed. Overlaid at boot. No container runtime. | ||
| - **Composable extensions** — systemd-sysext and confext. Read-only images, signable at build time. Overlaid at boot. No container runtime. | ||
| - **Immutable rootFS** — SquashFS, read-only. A/B boot slots. BTRFS `/var` for extensions and data. |
| - **Security levels** — Higher SLs require stronger controls. SL-2 (protection against intentional violation with simple means) is the baseline for most industrial deployments. SL-3 (sophisticated means) requires hardware-backed security. | ||
|
|
||
| **How Avocado addresses this:** The layered security architecture — secure boot, dm-verity, LUKS encryption, extension isolation — provides the defense-in-depth that IEC 62443 requires. Hardware-backed key storage supports SL-3 deployments. The immutable root with verified extensions provides data integrity at the OS level. Audit logging and boot mode separation support access control and use control requirements. Atomic updates with rollback provide resource availability during maintenance. | ||
| **How Avocado addresses this:** The layered security architecture — secure boot, an immutable signature-verified root, LUKS encryption, extension isolation — provides the defense-in-depth that IEC 62443 requires. Hardware-backed key storage supports SL-3 deployments. The immutable root with signed extensions provides data integrity at the OS level. Audit logging and boot mode separation support access control and use control requirements. Atomic updates with rollback provide resource availability during maintenance. |
|
|
||
| 1. **Download** — The update payload is downloaded and written to the inactive slot. The active system continues running normally throughout. | ||
| 2. **Verify** — Cryptographic signatures are validated against the signing keys provisioned on the device. The dm-verity hash tree is verified for the new root filesystem. | ||
| 2. **Verify** — Cryptographic signatures are validated against the signing keys provisioned on the device, and each image is checked against the hash and length recorded in that signed metadata. A payload that fails either check is not installed, and the active slot is left untouched. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.
Suppressed comments (2)
src/docs-overview/about.mdx:48
about.mdxstill describes the immutable root filesystem as SquashFS and claimsavocado provisionhandles fuse burning. That contradicts the corrections in this PR (root is erofs; fuse burning is not performed byavocado provision). Please update these bullets to avoid readers carrying forward the same inaccurate claims.
- **Composable extensions** — systemd-sysext and confext. Read-only images, signable at build time. Overlaid at boot. No container runtime.
- **Immutable rootFS** — SquashFS, read-only. A/B boot slots. BTRFS `/var` for extensions and data.
- **Declarative config** — `avocado.yaml` defines target, runtimes, extensions, packages, overlay, SDK tools. One file.
- **Cross-compilation SDK** — Composable. Declare `nativesdk-rust`, `nativesdk-go`, whatever you need. Automatically configured for your target arch.
- **Hardware-in-the-loop** — NFS mount your code onto running hardware. Edit locally, see it on the device. No rebuild cycle.
src/docs-overview/security/production-ready-features.md:77
- This IEC 62443 summary still risks implying that extension signing/verification is a shipped integrity control (“immutable root with signed extensions”). Elsewhere in this PR we clarify that per-extension verification before overlay is not enabled yet. Suggest rephrasing this line to avoid overstating current guarantees.
**How Avocado addresses this:** The layered security architecture — secure boot, an immutable signature-verified root, LUKS encryption, extension isolation — provides the defense-in-depth that IEC 62443 requires. Hardware-backed key storage supports SL-3 deployments. The immutable root with signed extensions provides data integrity at the OS level. Audit logging and boot mode separation support access control and use control requirements. Atomic updates with rollback provide resource availability during maintenance.
|
|
||
| Avocado does not program fuses today. `avocado provision` deploys a runtime to a device and does not touch them, and there is no fuse-burning tooling in the board layers either. Burning fuses is a manual step with the silicon vendor's own tool, and folding it into the provisioning flow is part of the enforcement work above. | ||
|
|
||
| Treat it as one-way. A fuse cannot be un-burned, a wrong value cannot be corrected, and a board whose key hash is burned incorrectly can no longer establish a root of trust at all. Practice the procedure on a board you are willing to lose before running it on anything else, and check the byte order the vendor's tool expects against the byte order your key hash is printed in, because the two do not always match. |
| Security in Avocado OS is not a feature you bolt on later — it's structural. The secure boot chain starts at the hardware root of trust and runs through the bootloader into the kernel. From there, the root filesystem and every extension are immutable images, verified when they are installed. | ||
|
|
||
| - [Secure boot](/avocado-os/security/secure-boot) with a verified boot chain from bootloader through kernel through extensions | ||
| - [dm-verity filesystem integrity](/avocado-os/security/filesystem-integrity) on every read-only image, including extensions | ||
| - [Secure boot](/avocado-os/security/secure-boot) with a verified boot chain from the hardware root of trust through the bootloader and kernel |
The page described a key-management story the platform does not have. Three claims, each checked against the source rather than reasoned about. The hardware key storage table listed four mechanisms - TPM 2.0, ARM TrustZone TEE, secure enclave via NXP CAAM or the NVIDIA security engine, and a crypto authentication co-processor. One is real. The /var key is sealed by the OP-TEE firmware TPM, on the i.MX 93 FRDM, when the image is built with the fTPM feature; nothing binds a volume key to CAAM or to a co-processor. The TrustZone row was not a second mechanism either - the firmware TPM runs as an OP-TEE trusted application, so it was the same path counted twice. Replace the table with the one entry that holds and say where it holds. "Per-application encryption domains" claimed extensions could carry their own keys, with an AI model extension encrypting its own weights. There is no such mechanism: grep for encryption across the CLI's extension command finds nothing, and everything under /var is covered by the single volume key. Say so plainly instead, because a reader planning around per-extension isolation would be planning around nothing. "Key provisioning is integrated into the avocado provision workflow" was the furthest off, and the same shape as the fuse-programming claim corrected on the secure-boot page: work attributed to the CLI that the CLI does not do. Nothing in it generates, seals or programs key material, and there is no key hierarchy or fleet key escrow. Keys are established by the device on its first boot - Argon2id from the SoC identifier, then a TPM-sealed keyslot where an fTPM exists. Describe that, and name the reformat, since turning encryption on creates the container over whatever /var held and so is a provisioning-time decision rather than a field upgrade. What survives is what the code does: LUKS2 with AES-256-XTS on /var, the Argon2id key everywhere, and PCR 7 sealing on the one target - now verified on hardware rather than asserted, with a systemd-tpm2 token bound to PCR 7 in the sha256 bank and the Argon2id keyslot kept as the recovery path. The Argon2id description also loses "provisioned secrets, boot state", which it does not use, and gains the limit that matters: the SoC identifier is readable rather than secret, so a derived key defends the media once removed but not code running on the device. That distinction is the reason to enable the seal where it is available, and burying it made the two paths look interchangeable. Title and slug are unchanged so inbound links and the redirect keep working. Signed-off-by: Javier Tia <javier@peridio.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated no new comments.
Suppressed comments (3)
Previously missed (1) — in code that hasn't changed since the last review.
src/docs-overview/security/production-ready-features.md:77
- This still presents "secure boot" as part of the shipped defense-in-depth story for IEC 62443, but the updated Secure Boot page in this PR states boot chain enforcement is not enabled on any target in the current release. Rephrase this line to avoid implying secure boot enforcement is currently providing defense-in-depth.
**How Avocado addresses this:** The layered security architecture — secure boot, an immutable signature-verified root, LUKS encryption, extension isolation — provides the defense-in-depth that IEC 62443 requires. Hardware-backed key storage supports SL-3 deployments. The immutable root with signed extensions provides data integrity at the OS level. Audit logging and boot mode separation support access control and use control requirements. Atomic updates with rollback provide resource availability during maintenance.
src/docs-overview/about.mdx:45
- This page still describes the immutable root filesystem as SquashFS, but the surrounding security docs in this PR update the root filesystem to erofs. This should be made consistent to avoid contradicting the updated security claims.
- **Composable extensions** — systemd-sysext and confext. Read-only images, signable at build time. Overlaid at boot. No container runtime.
- **Immutable rootFS** — SquashFS, read-only. A/B boot slots. BTRFS `/var` for extensions and data.
src/docs-overview/security/secure-boot.md:79
- "un-burned" is a nonstandard spelling here; "unburned" is the usual form.
Treat it as one-way. A fuse cannot be un-burned, a wrong value cannot be corrected, and a board whose key hash is burned incorrectly can no longer establish a root of trust at all. Practice the procedure on a board you are willing to lose before running it on anything else, and check the byte order the vendor's tool expects against the byte order your key hash is printed in, because the two do not always match.
The page claimed the /var key was "bound to PCR 7, released only when that measurement matches", and the intro drew the sharper conclusion that only the sealed key defends against code running on the device. Hardware says otherwise. Enrolling the keyslot on an i.MX 93 FRDM, systemd-cryptenroll reports "none of the selected PCRs are valid ... PCR policy effectively unenforced", because nothing measures into PCR 7 on the way up: the firmware TPM is an OP-TEE application that only becomes available once the initramfs is running, long after the boot chain it would have to measure. cryptsetup luksDump still prints tpm2-hash-pcrs: 7, so the enrollment looks correctly bound and reading the token is not enough to catch this. State the guarantee that survives instead of the one that reads better. The key is sealed inside the TEE and cannot be unsealed on other hardware, so device binding is real and worth having; binding to a particular boot state is not, and a reader planning a threat model around the old wording would have credited the volume with a defense it does not have. The distinction between the two key paths is rewritten on the axis that still separates them - whether the key is reconstructible from a readable identifier or never leaves the TEE - rather than on an on-device defense neither provides. The caution names the condition that would make the stronger claim true, so it can be removed against evidence rather than taste. Signed-off-by: Javier Tia <javier@peridio.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated no new comments.
Suppressed comments (6)
Previously missed (4) — in code that hasn't changed since the last review.
src/docs-overview/security/production-ready-features.md:77
- This section presents "secure boot" as a currently shipped defense-in-depth layer, but the Secure Boot page now states boot-chain enforcement is not enabled on any target in the current release. Please qualify this sentence so it doesn't contradict the Secure Boot documentation.
**How Avocado addresses this:** The layered security architecture — secure boot, an immutable signature-verified root, LUKS encryption, extension isolation — provides the defense-in-depth that IEC 62443 requires. Hardware-backed key storage supports SL-3 deployments. The immutable root with signed extensions provides data integrity at the OS level. Audit logging and boot mode separation support access control and use control requirements. Atomic updates with rollback provide resource availability during maintenance.
src/docs-hardware/stmicroelectronics/stm32mp257f-dk/index.mdx:81
- This board page still advertises "Secure boot" as a shipped feature, but the updated Secure Boot documentation states boot-chain enforcement is not enabled on any target in the current release. Consider removing the secure-boot claim here or qualifying it to match the enforcement-status note.
Secure boot with TrustZone, an immutable signature-verified root, and LUKS encryption. Industrial-grade security from day one.
src/docs-hardware/nvidia/jetson-orin-nano-developer-kit/index.mdx:86
- This board page still advertises "Secure boot" as a shipped feature, but the updated Secure Boot documentation states boot-chain enforcement is not enabled on any target in the current release. Consider removing the secure-boot claim here or qualifying it to match the enforcement-status note.
Secure boot, an immutable signature-verified root, and LUKS encryption across all architectures. Reproducible images simplify certification.
src/docs-overview/features.md:201
- This section claims a "secure boot chain" and a "verified boot chain" as current properties. That conflicts with the updated Secure Boot page, which now states boot-chain enforcement is not enabled on any target in the current release. Please reword to reflect that enforcement is in development and link readers to the Secure Boot status note.
Security in Avocado OS is not a feature you bolt on later — it's structural. The secure boot chain starts at the hardware root of trust and runs through the bootloader into the kernel. From there, the root filesystem and every extension are immutable images, verified when they are installed.
- [Secure boot](/avocado-os/security/secure-boot) with a verified boot chain from the hardware root of trust through the bootloader and kernel
src/docs-overview/about.mdx:45
- The "Immutable rootFS" bullet still says the root filesystem is SquashFS, but the rest of this PR updates the docs to state the root is erofs. This leaves the About page inconsistent and factually incorrect.
- **Composable extensions** — systemd-sysext and confext. Read-only images, signable at build time. Overlaid at boot. No container runtime.
- **Immutable rootFS** — SquashFS, read-only. A/B boot slots. BTRFS `/var` for extensions and data.
src/docs-overview/security/atomic-update-architecture.md:36
- Update verification is performed using public verification keys/trust anchors on the device; referring to "signing keys provisioned on the device" is misleading (and implies private signing material is present on-device).
2. **Verify** — Cryptographic signatures are validated against the signing keys provisioned on the device, and each image is checked against the hash and length recorded in that signed metadata. A payload that fails either check is not installed, and the active slot is left untouched.
Eight sentences added by this branch used an em dash where a colon, semicolon, comma pair or parenthesis reads the same. House style is a plain hyphen, so these were mine to clean up rather than inherit. Scope is deliberately narrow, and it is narrower than a grep suggests. The files this branch touches carry 118 em dashes; 113 predate it and belong to prose nobody here wrote, so rewriting them would bury eight real edits inside a hundred drive-by ones. Of the thirteen this branch did author, five are list items of the form "**Label** - text" sitting in lists whose other entries already use that form and predate this work. Changing only the entries this branch happens to own would leave one list rendering two ways, which is worse than the dash, so those five stay. No rendered meaning changes; scripts/checks.sh passes. Signed-off-by: Javier Tia <javier@peridio.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.
Suppressed comments (2)
src/docs-overview/about.mdx:48
- This section still states the immutable root filesystem is SquashFS and that
avocado provisionhandles fuse burning. Elsewhere in this PR (and insecure-boot.md) the root is described as read-only erofs, and fuse programming is explicitly not performed byavocado provision. Keeping these bullets as-is reintroduces the two claims this PR is correcting.
- **Composable extensions** — systemd-sysext and confext. Read-only images, signable at build time. Overlaid at boot. No container runtime.
- **Immutable rootFS** — SquashFS, read-only. A/B boot slots. BTRFS `/var` for extensions and data.
- **Declarative config** — `avocado.yaml` defines target, runtimes, extensions, packages, overlay, SDK tools. One file.
- **Cross-compilation SDK** — Composable. Declare `nativesdk-rust`, `nativesdk-go`, whatever you need. Automatically configured for your target arch.
- **Hardware-in-the-loop** — NFS mount your code onto running hardware. Edit locally, see it on the device. No rebuild cycle.
src/docs-overview/security/production-ready-features.md:121
- The "Extension isolation" paragraph still states extensions are "independently verified". In this PR’s updated security docs, per-extension verification before overlay is explicitly not enabled yet; extensions can be signed, but are not currently verified at boot/overlay time. This sentence should be scoped to what is actually enforced today.
The read-only root filesystem prevents runtime modification of system binaries, libraries, and configuration. Even with root access in production mode, the read-only erofs root cannot be written to. Combined with signature verification at install time, this means the system running in the field is the system that was built and signed, short of the storage medium being modified offline.
### Extension isolation
System extensions overlay onto the immutable root but maintain clear boundaries. Each extension is independently signed, independently verified, and independently updatable. A compromised application extension cannot modify the core OS or other extensions — the overlay architecture enforces this structurally, not just by policy.
|
|
||
| - [Secure boot](/avocado-os/security/secure-boot) with a verified boot chain from bootloader through kernel through extensions | ||
| - [dm-verity filesystem integrity](/avocado-os/security/filesystem-integrity) on every read-only image, including extensions | ||
| - [Secure boot](/avocado-os/security/secure-boot) with a verified boot chain from the hardware root of trust through the bootloader and kernel |
| ### Production Security | ||
|
|
||
| Secure boot with TrustZone, dm-verity, and LUKS encryption. Industrial-grade security from day one. | ||
| Secure boot with TrustZone, an immutable signature-verified root, and LUKS encryption. Industrial-grade security from day one. |
| ### Production Security | ||
|
|
||
| Secure boot, dm-verity, and LUKS encryption across all architectures. Reproducible images simplify certification. | ||
| Secure boot, an immutable signature-verified root, and LUKS encryption across all architectures. Reproducible images simplify certification. |
Problem
The security pages describe two capabilities the product does not have.
docs-overview/security/filesystem-integrity.mdtells customers that every filesystem read is verified against a Merkle hash tree, that the roothash is signed into the boot chain, and that each extension carries its own independent hash tree.features.mdadds that a single altered bit is detected in every extension. None of that is implemented:meta-avocadohas noveritysetupcall, no roothash generation, and no verity device activation in any recipe, class, or script. The only dm-verity artifact is a kernel fragment that setsCONFIG_DM_VERITY=yand then disablesCONFIG_PKCS7_MESSAGE_PARSER, so a signed roothash could not be verified even if a hash tree existed.docs-overview/security/secure-boot.mddocumentsavocado secure-boot enableas its headline example. No such command exists: the stringsecure-bootappears nowhere inavocado-cli, andavocado --helplists no such subcommand. The same page saysavocado provisionprograms fuses as part of the manufacturing flow; that command is a shortcut toruntime provision, touches no fuses, and no board layer carries fuse-burning tooling either.Someone building a compliance answer or an RFP response from these pages would be citing controls we do not ship, and someone following the secure-boot page would run a command that does not resolve.
Solution
Describe the properties that exist, and say plainly where the rest stands.
Filesystem integrity today comes from a read-only erofs root that nothing at runtime can rewrite, update payloads checked against signed metadata before they install, and A/B slots that roll back rather than leave a half-written root. That is a weaker guarantee than per-block verification, and it is one we can stand behind. dm-verity stays on the page as a roadmap section naming exactly what changes when it lands, so a reader evaluating the gap can see it rather than finding a feature they had read about silently deleted.
Secure boot is a build-time story rather than a CLI one. The
securebootdistro feature is already on by default and generates the per-machine UEFI key chain; whether a bootloader then enforces a signature is per-silicon and configured per board. Enforcement gets a caution naming where it actually stands.Two claims survive on their merits and are stated more precisely rather than cut. Signing-key management is real:
avocado signing-keysregisters keys, including ones generated inside a PKCS#11 token so the private half never leaves the device, which is what makes the multi-vendor signing story true. That section keeps its substance and loses only "end-to-end chain of trust", since there is no verified chain for those signatures to hang off yet.Key changes
filesystem-integrity.mdaround immutability, signature-verified updates, and A/B rollback, with dm-verity as an explicit roadmap sectionsecure-boot.mdto what ships: replace the non-existent command with the real build-time path and the signing-key commands, correct the fuse-provisioning section, and add an enforcement-status cautionfeatures.md,core-concepts.mdx,about.mdx,atomic-update-architecture.md,hardware-backed-encryption.md,production-ready-features.md, and fourdocs-hardwareboard pagesReviewer notes
This changes customer-facing security claims and reads as a walk-back, deliberately. The strongest sentence in the diff says boot chain enforcement is not enabled on any target in the current release. That is accurate as of this commit, and it is the kind of claim with sales consequences, so it is worth a second reader rather than a rubber stamp. If you would rather that framing be softer, the
secure-boot.mdcommit is separable from the dm-verity one.Verified with
npm run build(Docusaurus 3.10.1), exit 0, no broken links. Command shapes checked againstavocado 1.0.0-rc.1help output. No runtime or hardware testing applies; this is a docs-only change.Two things intentionally not in scope. The i.MX 93 field note repeats these claims and is handled in #477, which already owns that file and carries its verification-status caution. And the pages will need a second pass once verity actually ships, to state the delivered per-machine scope rather than reverting to the universal phrasing removed here.