Skip to content

Correct the dm-verity and secure-boot claims - #491

Open
jetm wants to merge 5 commits into
mainfrom
security/dm-verity-claims
Open

Correct the dm-verity and secure-boot claims#491
jetm wants to merge 5 commits into
mainfrom
security/dm-verity-claims

Conversation

@jetm

@jetm jetm commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Problem

The security pages describe two capabilities the product does not have.

docs-overview/security/filesystem-integrity.md tells 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.md adds that a single altered bit is detected in every extension. None of that is implemented: meta-avocado has no veritysetup call, no roothash generation, and no verity device activation in any recipe, class, or script. The only dm-verity artifact is a kernel fragment that sets CONFIG_DM_VERITY=y and then disables CONFIG_PKCS7_MESSAGE_PARSER, so a signed roothash could not be verified even if a hash tree existed.

docs-overview/security/secure-boot.md documents avocado secure-boot enable as its headline example. No such command exists: the string secure-boot appears nowhere in avocado-cli, and avocado --help lists no such subcommand. The same page says avocado provision programs fuses as part of the manufacturing flow; that command is a shortcut to runtime 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 secureboot distro 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-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 those signatures to hang off yet.

Key changes

  • Rewrite filesystem-integrity.md around immutability, signature-verified updates, and A/B rollback, with dm-verity as an explicit roadmap section
  • Scope secure-boot.md to 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 caution
  • Correct the same dm-verity claim in ten further places found by a repo-wide sweep, beyond the two originally identified: features.md, core-concepts.mdx, about.mdx, atomic-update-architecture.md, hardware-backed-encryption.md, production-ready-features.md, and four docs-hardware board pages
  • Fix an adjacent factual error in three pages: the root filesystem is erofs, not SquashFS
  • Add an irreversibility and byte-order warning to the fuse section, which cost us a board

Reviewer 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.md commit is separable from the dm-verity one.

Verified with npm run build (Docusaurus 3.10.1), exit 0, no broken links. Command shapes checked against avocado 1.0.0-rc.1 help 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.

jetm added 2 commits August 23, 2026 09:01
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>
Copilot AI lite review requested due to automatic review settings August 23, 2026 15:47
@jetm
jetm force-pushed the security/dm-verity-claims branch from a5e2f42 to a18df89 Compare August 23, 2026 15:50

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.
Copilot AI review requested due to automatic review settings August 23, 2026 15:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.mdx still describes the immutable root filesystem as SquashFS and claims avocado provision handles fuse burning. That contradicts the corrections in this PR (root is erofs; fuse burning is not performed by avocado 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.
Comment thread src/docs-overview/features.md Outdated
Comment on lines +199 to +201
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>
Copilot AI review requested due to automatic review settings August 23, 2026 23:06

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Copilot AI review requested due to automatic review settings August 24, 2026 17:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Copilot AI review requested due to automatic review settings August 24, 2026 23:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 provision handles fuse burning. Elsewhere in this PR (and in secure-boot.md) the root is described as read-only erofs, and fuse programming is explicitly not performed by avocado 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants