Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
469 commits
Select commit Hold shift + click to select a range
7b860d2
Signal Secure interrupts to S-EL0 partitions with w1 and w2 zero
aidangarske Sep 24, 2026
bf21113
Keep Non-secure interrupts queued while a partition runs for a Secure…
aidangarske Sep 24, 2026
a08acd8
Audit the EL3 archive before linking so a failed audit leaves no image
aidangarske Sep 24, 2026
b67e222
Reject FF-A manifest policies the SPMC does not implement
aidangarske Sep 24, 2026
a702d25
Order memmove's copy direction by address, not by pointer comparison
aidangarske Sep 24, 2026
467ee5c
Skip the AArch64 guest1 scenario, which has no second NS endpoint
aidangarske Sep 24, 2026
79bd33d
Stop the EL3 boot when parking, the redistributor, or the tick fails
aidangarske Sep 24, 2026
e5cda91
Treat parked secondaries as outside the Normal world's PSCI machine view
aidangarske Sep 24, 2026
c16070f
Cold-reset the machine on PSCI SYSTEM_RESET and fail closed without one
aidangarske Sep 24, 2026
66dc93d
Refuse SMC64 ids from AArch32 callers and keep an EL2 world's HCR_EL2
aidangarske Sep 24, 2026
1080ec9
Run the reset, park, and EL2 entry negatives in the AArch64 CI matrix
aidangarske Sep 24, 2026
b529260
Re-audit the EL3 image on a policy change and drop it on a failed audit
aidangarske Sep 24, 2026
daca841
Allow only monitor definitions in the EL3 archive
aidangarske Sep 24, 2026
abb9ea9
Catch every C spelling of an FF-A function-id literal in the split guard
aidangarske Sep 24, 2026
5ed86ad
Clean the Normal-world AArch64 payload with the top-level clean
aidangarske Sep 24, 2026
49c73ae
Route each GICv3 SPI to the boot PE when it is enabled
aidangarske Sep 24, 2026
ef96cee
Answer the SMCCC architecture calls for Secure-world callers
aidangarske Sep 24, 2026
5ff4e9b
Refuse a PSCI MIGRATE to an MPIDR outside the Normal world's machine …
aidangarske Sep 24, 2026
0c05324
Pin the AArch64 crypto conformance gates at 64 passed and 13 skipped
aidangarske Sep 24, 2026
35bf63f
Fail an FF-A ACS scenario whose emulator does not exit cleanly
aidangarske Sep 24, 2026
019dfeb
Record the xlnx-versal-virt warm SYSTEM_RESET as an emulator limitation
aidangarske Sep 24, 2026
352b0f2
Grant a borrower only pages its table already maps for the SPMC
aidangarske Sep 24, 2026
0172da5
Give a reclaiming owner its access back before the relayer wipes the …
aidangarske Sep 24, 2026
8e9f39f
Leave a terminated owner's memory with the SPM instead of handing it …
aidangarske Sep 24, 2026
490c592
Refuse FFA_MEM_PERM_SET read-only on memory the SPMC writes for the p…
aidangarske Sep 24, 2026
9d4ef8b
Accept the no-access encoding in FFA_MEM_PERM_SET
aidangarske Sep 24, 2026
642264d
Let a partition read and change the data access of its own Device pages
aidangarske Sep 24, 2026
07fd673
Treat pages a donate gave a partition as its own in its permission an…
aidangarske Sep 24, 2026
4b82d3a
Refuse FFA_MEM_PERM_SET over memory a transaction still covers
aidangarske Sep 24, 2026
ca4d979
Ignore the SBZ bits above the FFA_MEM_PERM_SET permissions
aidangarske Sep 24, 2026
24942aa
Ignore the SBZ flag bits of a lend, share, or donate instead of refus…
aidangarske Sep 24, 2026
ec346a0
Ignore the SBZ fields of memory transaction descriptors instead of re…
aidangarske Sep 24, 2026
7f4eb1e
Ignore the SBZ bits of the retrieve, relinquish, and reclaim flags
aidangarske Sep 24, 2026
f020fba
Write memory access descriptors in the size of the reader's FF-A version
aidangarske Sep 24, 2026
b4692d4
Map a retrieve at the address ranges a borrower names when they are t…
aidangarske Sep 24, 2026
6dc1d65
Ignore the SBZ low half of the endpoint word in a Normal-world FFA_ME…
aidangarske Sep 24, 2026
894fe04
Cite the clause that lets a partition outside the relayer be named a …
aidangarske Sep 24, 2026
1fbdb82
Record the memory relayer's permission, range, and SBZ rules in the F…
aidangarske Sep 24, 2026
73143d5
Answer FFA_MEM_PERM_SET region refusals with INVALID_PARAMETERS and k…
aidangarske Sep 24, 2026
d6ceb22
Deliver an indirect message's header from the fields the SPMC validated
aidangarske Sep 24, 2026
f2654ff
Ignore the SBZ fields of FFA_MSG_SEND2 and its partition message header
aidangarske Sep 24, 2026
8927da9
Ignore the SBZ bits of direct message flags and clear them when relaying
aidangarske Sep 24, 2026
470e67a
Ignore the SBZ flag bits of FFA_NOTIFICATION_BIND
aidangarske Sep 24, 2026
6b3545d
Ignore the SBZ flag bits of FFA_PARTITION_INFO_GET
aidangarske Sep 24, 2026
c0ba1cb
Ignore the SBZ bits above the FFA_CONSOLE_LOG character count
aidangarske Sep 24, 2026
ea2b253
Refuse a direct request from a partition discovery does not list
aidangarske Sep 24, 2026
9564c4c
Bind each test timer to the partition that armed it
aidangarske Sep 24, 2026
231b56d
Hold a Normal-world test timer to its requested timeout
aidangarske Sep 24, 2026
f4d31f8
Read a partition's SVC32 FF-A call from w1-w7 alone
aidangarske Sep 24, 2026
4bf86f6
End a partition's initialization only at FFA_MSG_WAIT and refuse its …
aidangarske Sep 24, 2026
71b7226
Let an initializing partition send a direct request to an initialized…
aidangarske Sep 24, 2026
4bcb83c
Take a partition that reports failed initialization with FFA_ERROR ou…
aidangarske Sep 24, 2026
064aaca
Let a partition complete a direct request with FFA_SUCCESS
aidangarske Sep 24, 2026
5b13463
Declare that manifest partitions take no FF-A messages
aidangarske Sep 24, 2026
1a3e935
Carry the mandatory FF-A version in each partition manifest
aidangarske Sep 24, 2026
b1950aa
Apply one FFA_CONSOLE_LOG count rule at the SPMD and the SPMC
aidangarske Sep 24, 2026
61107bb
Ignore the SBZ bits above the FFA_PARTITION_INFO_GET_REGS start index…
aidangarske Sep 24, 2026
da416ff
Ignore the SBZ bits above the VM id of FFA_NOTIFICATION_BITMAP_DESTROY
aidangarske Sep 24, 2026
c39deda
Refuse FFA_MSG_SEND2 from a partition that does not advertise indirec…
aidangarske Sep 24, 2026
7fc000c
Check a partition's FFA_SUCCESS and FFA_ERROR encodings in the runtim…
aidangarske Sep 24, 2026
8397eec
Cover the SBZ and indirect-header rules at both FF-A instances in the…
aidangarske Sep 24, 2026
60c3f21
Declare that manifest partitions are handed no FF-A boot information
aidangarske Sep 24, 2026
3a1b625
Record the SP initialization model, FFA_SUCCESS completion, and SBZ h…
aidangarske Sep 24, 2026
337039c
Give each conformance test partition its own writable data segment
aidangarske Sep 24, 2026
e3deef1
Read and write FFA_MSG_SEND2 headers in each endpoint's negotiated la…
aidangarske Sep 24, 2026
c078278
Hand the RX buffer back on every FFA_MSG_WAIT
aidangarske Sep 24, 2026
60b101d
Refuse a partition's FFA_YIELD that names an endpoint or a timeout
aidangarske Sep 24, 2026
fd085a1
Walk a retrieve fragment's access array only at a valid descriptor size
aidangarske Sep 24, 2026
463a170
Lay out a v1.0 retrieve request in the v1.0 transaction header
aidangarske Sep 24, 2026
d3ba51f
Keep manifest-shared memory out of RX/TX mapping and FFA_MEM_PERM_SET
aidangarske Sep 24, 2026
0beab85
Let a relayer endpoint make its writable manifest memory read-only
aidangarske Sep 24, 2026
61cce16
Record the relayer's shared-memory and read-only permission rules in …
aidangarske Sep 24, 2026
4b4a6b7
Size the serial AArch64 CI job timeouts to the measured suite runtime
aidangarske Sep 24, 2026
79dd90a
Show every AArch64 scenario log in CI, not a stale list
aidangarske Sep 24, 2026
9780603
Ignore every output the target runners and the ACS cache leave in the…
aidangarske Sep 24, 2026
a33647d
Sign-extend every SMC64 PSCI function's int32 result across X0
aidangarske Sep 24, 2026
9522359
Power-cycle xlnx-versal-virt on a system reset, not a warm re-entry
aidangarske Sep 24, 2026
0f6e3d8
Take a retrieve request's first fragment before every composite offse…
aidangarske Sep 24, 2026
4bc4692
Refuse the zero-before-retrieval flag on a borrower's repeated retrieval
aidangarske Sep 24, 2026
751df05
Let a partition re-permission Non-secure memory donated to it, never …
aidangarske Sep 24, 2026
d489c5a
Refuse a partition's FFA_RXTX_UNMAP or FFA_RX_RELEASE that names an e…
aidangarske Sep 24, 2026
4332e93
Abort a fragmented memory transfer when its sender unmaps its RX/TX pair
aidangarske Sep 24, 2026
0d47b8e
Refuse PSA vectors in Normal-world memory lent, donated, or owned by …
aidangarske Sep 24, 2026
5c7628e
Honor the FFA_MSG_WAIT retain RX buffer flag from a v1.2 caller
aidangarske Sep 24, 2026
32c7b7b
Fail a target scenario whose emulator times out or exits the wrong way
aidangarske Sep 24, 2026
7a0ed82
Answer an SMC taken on the lower-AArch32 vector instead of faulting
aidangarske Sep 24, 2026
b2e62d8
Leave a partition that reports failed initialization waiting, not fau…
aidangarske Sep 24, 2026
9b8e10f
Cite the REL0 table that defines the FFA_MSG_WAIT retain RX flag at i…
aidangarske Sep 24, 2026
2839ffe
Ignore the SBZ VM and Hypervisor flags of a Normal-world FFA_NOTIFICA…
aidangarske Sep 24, 2026
54da945
Cite REL0 Table 7.2 for the 40-byte partition message header
aidangarske Sep 24, 2026
c34c758
Advertise only the conformance NVMEM the driver partition actually st…
aidangarske Sep 24, 2026
4dd7018
Report a conformance trap the gate refuses as a failure, not success
aidangarske Sep 24, 2026
e5581fa
Note why FFA_FEATURES reports no RX/TX buffer size limit at the Norma…
aidangarske Sep 24, 2026
90d03da
Map every partition resource the SPMC writes whole and fail closed on…
aidangarske Sep 24, 2026
f54bbf6
Let a partition take over a shareable band only when it is that band'…
aidangarske Sep 24, 2026
836d6c4
Refuse a new fragmented transfer while the sender's last one is unfin…
aidangarske Sep 24, 2026
e3246e7
Release what a partition out of service held and answer ABORTED for o…
aidangarske Sep 24, 2026
151a4bf
Make the EL3 and core-port symbol guards fail closed on bad patterns
aidangarske Sep 24, 2026
5f4ea22
Read the retrieve alignment hint as a 2^n x 4 KB boundary
aidangarske Sep 24, 2026
2f51555
Wipe reclaimed memory before the owner's mapping comes back
aidangarske Sep 24, 2026
1fd799a
Make instructions fetchable when a partition page becomes executable
aidangarske Sep 24, 2026
615e90d
Cite why a wipe several borrowers ask for waits for the last to let go
aidangarske Sep 24, 2026
bce1238
Let only global definitions resolve references in the EL3 symbol guard
aidangarske Sep 25, 2026
d209b24
Claim no isolation level on an AArch64 port without a Normal-world me…
aidangarske Sep 25, 2026
d6b5ac2
Cite the clause that leaves the SPMC and SPMD ids implementation defined
aidangarske Sep 25, 2026
30ea8ad
Say the Versal model port claims no isolation level where the runner …
aidangarske Sep 25, 2026
d9711a8
Drop the notifications a retired sender pended along with its bindings
aidangarske Sep 25, 2026
1bb5fff
Refuse an indirect message to a VM without a notification bitmap
aidangarske Sep 25, 2026
18ad8a4
Refuse notification calls from and signals to partitions that take none
aidangarske Sep 25, 2026
bf77846
Record the notification rules for retired senders, VM bitmaps, and PS…
aidangarske Sep 25, 2026
df7ee13
Deny an indirect message to a PSA partition instead of refusing its i…
aidangarske Sep 25, 2026
d30e632
Open the ACS image initializer on its macro line for the bare-scope scan
aidangarske Sep 25, 2026
c3a2d15
Bring the AArch64 host suites under the C99 compliance check
aidangarske Sep 25, 2026
b2f2e0c
Bound the AArch64 guest bind loop by an object so gcc accepts it
aidangarske Sep 25, 2026
9e0956f
Keep the AArch64 images out of link-time optimization
aidangarske Sep 25, 2026
5c4df83
Parse a Normal-world memory descriptor only from a Secure copy
aidangarske Sep 25, 2026
eebc271
Accept only the fence's data abort on the probe load as the Secure-RA…
aidangarske Sep 25, 2026
0f9f01c
Probe PSCI targets with Must-be-zero affinity bits set
aidangarske Sep 25, 2026
2bb65d4
Cite the clauses that let a retrieve leave its access permissions uns…
aidangarske Sep 25, 2026
c8ccb7d
Add the upstream PSA patches as prerequisites of the fetch stamp
aidangarske Sep 25, 2026
5fa1da5
Stop expect_once aborting silently under set -euo pipefail
aidangarske Sep 25, 2026
1987598
Require timeout and truncate in the QEMU scenario preflight check
aidangarske Sep 25, 2026
2489af9
Cite the real ACS test-line format next to the deviation parser
aidangarske Sep 25, 2026
58c1c97
End the boot share proof's transaction on every path before partition…
aidangarske Sep 25, 2026
60ea9ff
Require a lend or share borrower to state the data access it retrieve…
aidangarske Sep 25, 2026
bfb1af6
Make a retrieve with the bypass flag name only the retrieving borrower
aidangarske Sep 25, 2026
c62e494
Record that a partition cannot send memory to the Normal world
aidangarske Sep 25, 2026
553d662
Hand a posted partition message's RX buffer to its receiver only on n…
aidangarske Sep 25, 2026
0df8c2c
Cite the tables that leave a 64-bit direct message's x8-x17 reserved
aidangarske Sep 25, 2026
8127987
Queue Normal-world interrupts while a PSA framework request runs its …
aidangarske Sep 25, 2026
a3c9c81
Refuse to build the reset budget for a port that is not emulated
aidangarske Sep 25, 2026
185e2fd
Record the shared keystore band as a known isolation level 3 gap
aidangarske Sep 25, 2026
f348bf7
Check the VM id and the buffer pair before FFA_RX_RELEASE releases an…
aidangarske Sep 25, 2026
e6fc821
Refuse memory calls from an endpoint the handle was not sent to with …
aidangarske Sep 25, 2026
41dfa2c
Classify external aborts on translation-table walks and parity errors…
aidangarske Sep 25, 2026
d978e7b
Reject an explicitly null FF-A manifest section
aidangarske Sep 25, 2026
db85be7
Stop the script self-tests when mktemp fails instead of writing besid…
aidangarske Sep 25, 2026
44ed104
Saturate LP64 PSA vector counts and lengths at the 32-bit veneer
aidangarske Sep 25, 2026
c2fcce7
Refuse guest heap requests the alignment rounding would wrap
aidangarske Sep 25, 2026
7bbbb69
Compare every byte read back in the storage scenario
aidangarske Sep 25, 2026
630c9fa
Set a fail-closed debug and PMU policy in MDCR_EL3 before either worl…
aidangarske Sep 25, 2026
68f994a
Refuse ABIs introduced after a caller's negotiated FF-A version
aidangarske Sep 25, 2026
83cc37d
Record the SPMD's RX_RELEASE scope and the NS-bit request's SP scope
aidangarske Sep 25, 2026
2ab8723
Fetch an advanced FF-A ACS pin into a reused checkout from the source…
aidangarske Sep 25, 2026
1912d36
Answer a locked FFA_VERSION with the version the caller settled on
aidangarske Sep 26, 2026
9818c6c
Refuse a feature id query whose input properties are not zero
aidangarske Sep 26, 2026
bb6a3b5
Reject a memory registration whose operation is not share, lend, or d…
aidangarske Sep 26, 2026
23b7eb9
Deliver every ERET-bound event to the SPMC with its unused registers …
aidangarske Sep 26, 2026
fc4d291
Size the domain table cache for every partition plus the retained boo…
aidangarske Sep 26, 2026
93d3ef7
Hold local wolfTrust symbols in the EL3 archive to the monitor namesp…
aidangarske Sep 26, 2026
212c099
Assert the EL3 load image ends before the SPMC image behind it
aidangarske Sep 26, 2026
ae0f67a
Keep the conformance NVM shadow to what the backend has loaded and st…
aidangarske Sep 26, 2026
93ecfc0
Record donated memory across a restart and the conformance isolation …
aidangarske Sep 26, 2026
ccf6947
Let anyone resume an endpoint yielded to a requester that left service
aidangarske Sep 26, 2026
ce96b40
Orphan a callee preempted mid-request when its requester leaves service
aidangarske Sep 26, 2026
948d30c
Bound the guest heap walk with integer addresses
aidangarske Sep 26, 2026
844f4da
Require a bypass retrieve request to name the caller as its only rece…
aidangarske Sep 26, 2026
fff969b
Cap an RX/TX pair at the 63 pages the map call can name
aidangarske Sep 26, 2026
2ac6d00
Hold the monitor's extended console path to the SPMC's negotiated ver…
aidangarske Sep 26, 2026
d03cf09
Allow only the FF-A symbol families the monitor builds in the EL3 arc…
aidangarske Sep 26, 2026
b247b15
Require an FF-A record for every partition when the section is present
aidangarske Sep 26, 2026
5f5de39
Record the unnegotiated-caller and empty boot-information interpretat…
aidangarske Sep 26, 2026
d3f647b
Let any partition resume an endpoint orphaned by a requester that lef…
aidangarske Sep 28, 2026
e6f906e
Reconcile ACS failures with each group's by-design set by name and by…
aidangarske Sep 28, 2026
5b27fd1
Release an ACS platform page only by its own base and span
aidangarske Sep 28, 2026
d9e6f38
Require a donate's receiver and a lend's one borrower to state their …
aidangarske Sep 28, 2026
e17213f
Clear the partition marker while the SPMC handles a lower-EL exception
aidangarske Sep 28, 2026
4e48e16
Stop the SPMC before its partitions start when a boot self-test fails
aidangarske Sep 28, 2026
cef8470
Resume a preempted echo partition by the id FFA_INTERRUPT names
aidangarske Sep 28, 2026
e3ff202
Grant EL0 only over an EL1 page a revoke puts back exactly
aidangarske Sep 28, 2026
c05d12b
Refuse a boot core count the EL3 parking state cannot hold
aidangarske Sep 28, 2026
e26b658
Give an ACS partition with no devices an empty device map without a z…
aidangarske Sep 28, 2026
5e22fc6
Describe the three CI lanes and the six FF-A ACS groups
aidangarske Sep 28, 2026
e87895e
Record the power management messages and Normal-world lent memory as …
aidangarske Sep 28, 2026
8cfce07
Let the echo partition wait again when FFA_RUN gives it cycles with n…
aidangarske Sep 28, 2026
2c8af39
Run the idle echo FFA_RUN probe on GICv2 and expect its preemption pr…
aidangarske Sep 28, 2026
63b1e6c
Run an AArch64 smoke tier on pull requests and gate the full matrix o…
aidangarske Sep 30, 2026
e1c72e4
Match the renamed ci:stm32h563 and ci:imxrt700 labels in the scenario…
aidangarske Sep 30, 2026
0da0baf
Reconcile the AArch64 branch with main's CI, host tests and scenario …
aidangarske Oct 2, 2026
a1ca58c
Declare the AArch64 partitions unprivileged and claim no isolation le…
aidangarske Oct 2, 2026
5a93042
Carry the level 3 hooks and the SP-to-SP vault door onto the AArch64 …
aidangarske Oct 2, 2026
7a27710
Split the AArch64 keystore band into private vault, attestation and c…
aidangarske Oct 2, 2026
e350e42
Claim AArch64 secure interrupts fail closed with clear-pending and re…
aidangarske Oct 2, 2026
04f5a6c
Keep the read-only wolfCrypt globals in the AArch64 constant data
aidangarske Oct 2, 2026
6596f1f
Validate partition-to-partition separation on every AArch64 boot
aidangarske Oct 2, 2026
b400055
Expect the FF-A ACS partitions at the same ids on both engines
aidangarske Oct 2, 2026
fdab6a5
Match the attestation status line across guest console interleave
aidangarske Oct 2, 2026
6aeabeb
Harden the AArch64 SPMC stack, SVC and FP paths and add their negatives
aidangarske Oct 2, 2026
a81d389
Run the attestation conformance suite under the reference QCBOR decod…
aidangarske Oct 2, 2026
5d3955a
Add QEMU twins of the peripheral isolation negatives
aidangarske Oct 2, 2026
9a12e90
Add a QEMU twin of the level 2 manifest refusal negative
aidangarske Oct 2, 2026
31b67fe
Add a QEMU twin of the HSM server pointer pin negative
aidangarske Oct 2, 2026
69a9136
Add QEMU twins of the band reset on restart negatives
aidangarske Oct 2, 2026
4380422
Add a QEMU twin of the overlapping partition tables refusal negative
aidangarske Oct 2, 2026
4f27afe
Document the QEMU AArch64 isolation twins
aidangarske Oct 2, 2026
61342c1
Declare isolation level 3 in the QEMU virt manifests
aidangarske Oct 3, 2026
0bdbbef
Tell the SPMC of each PSCI power operation before the monitor complet…
aidangarske Oct 3, 2026
ec2d711
State the isolation level 3 claim for the Cortex-A port on QEMU virt
aidangarske Oct 3, 2026
d8bc5fe
Share the isolation level 3 layout and platform hooks across AArch64 …
aidangarske Oct 3, 2026
9eebc04
Read the AArch64 level 3 layout only when a target names its port
aidangarske Oct 3, 2026
54c1c46
Take the AArch64 NVM flash geometry from constants in every flash cal…
aidangarske Oct 3, 2026
da8321b
Add isolated firmware TPM and PKCS11 interfaces
aidangarske Oct 14, 2026
e176216
Give the AArch64 CI workflow its own concurrency group
aidangarske Oct 3, 2026
62ff995
Fix the TPM client and PKCS11 relay host test builds
aidangarske Oct 21, 2026
369b124
Make the LP64 count and released-timer host checks test what they claim
aidangarske Oct 3, 2026
30e0f54
Abort a TPM command the fwTPM lost instead of replaying it
aidangarske Oct 21, 2026
312fa0b
Offer the FF-A memory-permission calls only from version 1.1
aidangarske Oct 3, 2026
8ea768c
Limit PKCS11 PIN attempts and keep test KDF counts out of production
aidangarske Oct 21, 2026
a9a9f0e
Refuse an AArch64 build whose level 3 bands leave Secure RAM
aidangarske Oct 3, 2026
7fc168d
Keep every fake compiler call in the PKCS11 PIN limit guard
aidangarske Oct 21, 2026
5adcd4f
Route a conformance partition interrupt that preempts the Normal world
aidangarske Oct 4, 2026
435481a
Restore TPM command re-delivery when the fwTPM fetches again
aidangarske Oct 21, 2026
f3eadf4
Make six host checks fail when the behaviour they name breaks
aidangarske Oct 4, 2026
ff47005
Complete standard license headers for TPM and PKCS11 sources
aidangarske Oct 24, 2026
d6aecd2
Zero every AArch64 partition band once before the partitions run
aidangarske Oct 4, 2026
653722c
Document measured TPM and PKCS11 interface footprints
aidangarske Oct 24, 2026
a2d28c1
Refuse AArch64 level 3 bands that overlap or are not page aligned
aidangarske Oct 4, 2026
5275c3b
Allow all application APIs to select either crypto engine
aidangarske Oct 24, 2026
960074a
Check each AArch64 keystore band is granted to the partition linked i…
aidangarske Oct 4, 2026
0da02fa
Update interface footprint measurements for both engines
aidangarske Oct 24, 2026
f9f3bb8
Fail the transport isolation rows when their connection is not valid
aidangarske Oct 5, 2026
1d3ac8b
Require real runtime passes for every API engine cell
aidangarske Oct 24, 2026
b7c4d2c
Clear a partition interrupt's pending state when it is enabled or dis…
aidangarske Oct 5, 2026
25b20c1
Route implicit fwTPM crypto devices through the HSM engine
aidangarske Oct 24, 2026
1b385ea
Run the AArch64 restart budget once more after the last init pass
aidangarske Oct 5, 2026
e4bacdb
Add configurable crypto profiles and reduce interface footprint
aidangarske Oct 26, 2026
1f26b55
Keep the AArch64 Secure RAM band check exact for any override size
aidangarske Oct 5, 2026
85087f3
Record validated profile footprint and runtime evidence
aidangarske Oct 26, 2026
d1de755
State that the AArch64 manifests imply the AArch64 execution state
aidangarske Oct 5, 2026
3370853
Order raw provider compilation after crypto profile generation
aidangarske Oct 26, 2026
b1468b0
Rebuild the AArch64 arch objects when a port header changes
aidangarske Oct 5, 2026
edafe79
Run Cortex-M interface handlers in wolfTrust partitions
aidangarske Oct 26, 2026
9cd93e4
Set the descriptor version in the Normal-world memory negative builder
aidangarske Oct 5, 2026
2b52a09
Remove interface workers and share read-only crypto
aidangarske Oct 26, 2026
711456c
Name both wolfHSM-only QEMU scenarios in the engine docs
aidangarske Oct 5, 2026
5f73121
Match PSA footprint builds to one application slot
aidangarske Oct 26, 2026
22d04f9
Let FFA_RUN resume a partition a Normal-world interrupt preempted
aidangarske Oct 5, 2026
a29f36a
Use structured cleanup in the TPM service
aidangarske Oct 26, 2026
3e0fde1
Refuse AArch64 manifest interrupts outside conformance builds
aidangarske Oct 5, 2026
b3edbe2
Size the standalone Secure slot for either interface engine
aidangarske Oct 26, 2026
ba58aae
Report FFA_YIELD as supported at the Secure physical instance
aidangarske Oct 5, 2026
038e245
Merge pull request #76 from aidangarske/pkcs11-tpm-interfaces
dgarske Oct 26, 2026
5b2e628
Dry-run the guest runner layout checks with the host compiler
aidangarske Nov 6, 2026
4bda598
Let the SPM judge the whole ITS and PS read destination before the tr…
aidangarske Nov 6, 2026
de50818
Expect the PSA Storage invalid argument from psa_its_get into lent me…
aidangarske Nov 6, 2026
7e24d75
Reduce interface crypto overhead and enforce matched CI sizes
aidangarske Nov 5, 2026
e48aaea
Keep interface CI enabled for inputless nightly dispatches
aidangarske Nov 5, 2026
babdeea
Separate M33MU concurrency from reusable C99 checks
aidangarske Nov 5, 2026
19f2324
Cover full storage destinations on the updated development base
aidangarske Nov 6, 2026
8d0d7b8
Merge pull request #81 from aidangarske/fix/interface-size-parity
dgarske Nov 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
68 changes: 63 additions & 5 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# wolfTrust CI

CI has a fast per-PR host lane, the tiered M33MU emulator matrix, and static
analysis. M33MU runs a per-port smoke set on every pull request and the full
Three lanes, modeled on wolfProvider's CI: a fast per-PR host lane, the M33MU
emulator matrix, and the AArch64 QEMU matrix, plus static analysis. Both
emulator lanes are tiered: a smoke set on every pull request, and the full
matrix on labels, main pushes, and nightly.

`codeql.yml` runs C security queries. `coverity.yml` runs on Sundays at
Expand All @@ -22,7 +23,24 @@ An accepted upload queues analysis; results appear after Coverity processes it.
|------|---------|---------|
| **Fast (per-PR)** | every PR; push to main | host unit suites, ISO C99, house style, bare-scope scan, Arm PSA-FF conformance, cross-compile, compiler matrix, sanitizers, valgrind, integrations, core/port split guard |
| **M33MU smoke** | every PR | per port, on both crypto engines: STM32H563 `positive gtzcneg crossdomain bothpsa confboot devcrypto`; MIMXRT700 `positive ahbscneg crossdomain bothpsa confboot devcrypto` |
| **M33MU full** | PR labels `ci:all`, `ci:h5`, `ci:rt700`; push to main; `cron: 0 8 * * *`; `workflow_dispatch` (port input) | every scenario of that port on both engines (see below) |
| **M33MU full** | PR labels `ci:all`, `ci:stm32h563`, `ci:imxrt700`; push to main; `cron: 0 8 * * *`; `workflow_dispatch` (port input) | every scenario of that port on both engines (see below) |
| **AArch64 smoke** | every PR | a representative subset: `virt-gicv3-a72` `smoke boot positive crossdomain ffa-direct confboot devcrypto` on both crypto engines, `versal-virt` the same on the native engine, plus dedicated QEMU fwTPM and PKCS#11 interface and isolation jobs |
| **AArch64 full** | PR labels `ci:all`, `ci:aarch64`, `ci:qemu-virt`, `ci:qemu-versal`; push to main; nightly; `workflow_dispatch` (cell input) | every AArch64 scenario and the Arm FF-A ACS groups on three QEMU cells under both crypto engines (see below) |

All dedicated API and interface-isolation rows require a real terminal pass
marker; a successful skip cannot satisfy the job. Each job identifies its
engine and operation profile. M33MU runs 24 positives across
`[default, full] x [native, hsm] x [psa, pkcs11, tpm] x [zephyr, freertos]`, plus
eight interface-isolation jobs. QEMU `virt` runs 20 positives/isolation jobs
across both profiles and engines. Versal cross-builds both engines, but its QEMU
model cannot provide the XMPU/RISAF isolation those runtime scenarios require.

`stm32h563_interface_footprint` builds the six default-profile API/engine pairs
with the same compiler, pinned FreeRTOS source, one application and production
PIN settings. Missing measurements fail the job. Each TPM/PKCS#11 total must
remain within 8 KiB of same-engine PSA; the uploaded CSV reports Secure,
application, total flash and RAM sections separately. This is a regression
ceiling, not a claim of exact parity.

The M33MU workflow (`m33mu.yml`) is label-selected the way wolfProvider's
`pr-osp-select.yml` is: a `select` job checks the routing table
Expand All @@ -33,8 +51,8 @@ groups it picked, so a job that is not selected never appears as skipped.
| Label | Effect |
|-------|--------|
| (no label) | each port's smoke tier on both engines |
| `ci:h5` | the STM32H563 full matrix (the change touched only that port) |
| `ci:rt700` | the MIMXRT700 full matrix (the change touched only that port) |
| `ci:stm32h563` | the STM32H563 full matrix (the change touched only that port) |
| `ci:imxrt700` | the MIMXRT700 full matrix (the change touched only that port) |
| `ci:all` / `ci:m33mu` | every scenario of every port (a core change) |

A label keeps applying on later pushes to the PR. Pushes to
Expand All @@ -60,6 +78,10 @@ test-target` also reads. The table below is a representative slice:
| `stm32h563_confboot_<engine>` | `confboot` | full Arm FF-M IPC suite |
| `stm32h563_devstorage_<engine>` | `devstorage` | PSA ITS/PS conformance |
| `stm32h563_devcrypto_<engine>` | `devcrypto` | PSA Crypto conformance |
| `stm32h563_pkcs11_<zephyr\|freertos>_<engine>_<profile>` | `pkcs11` | each RTOS application runs the nine-case default or 40-case full PKCS#11 suite through `SERVICE_PKCS11` and the isolated provider |
| `stm32h563_tpm_<zephyr\|freertos>_<engine>_<profile>` | `tpm` | each RTOS application sends real TPM 2.0 commands through `SERVICE_TPM` to the Secure fwTPM partition |
| `stm32h563_pkcs11neg_<engine>_<profile>` | `pkcs11neg` | PKCS#11 partition-band isolation and provider recovery |
| `stm32h563_tpmneg_<engine>_<profile>` | `tpmneg` | TPM relay and fwTPM partition-band isolation |
| `stm32h563_vaultrecover_<engine>` | `vaultrecover` | #95 foreign pool reformatted |
| `stm32h563_vaultrecoversec_<engine>` | `vaultrecoversec` | #95 SECURED never wipes |
| `mimxrt700_positive_<engine>` | `positive` | MIMXRT700 chain under the RT700 model, both guests finish |
Expand All @@ -86,6 +108,42 @@ full matrix on a PR, add its `ci:` label; off-PR against a branch,
The local box gate `run_m33mu.sh` (a Zephyr+FreeRTOS lifecycle) and the
`make test-target` loop remain the pre-push mirror of the M33MU jobs.

## AArch64 QEMU

`aarch64-cross-compile.yml` (workflow name **AArch64 cross compilation**) is
label-selected the same way `m33mu.yml` is: a `select` job self-tests the
matrix, reads the PR's `ci:*` labels, the event, and the dispatch input, and
one matrix job runs exactly the cells it picked. It runs in
`ghcr.io/wolfssl/wolfboot-ci-aarch64` on three cells, `virt-gicv2-a35`,
`virt-gicv3-a72`, and `versal-virt`.

| Label | Effect |
|-------|--------|
| (no label) | the smoke tier: `virt-gicv3-a72` (both engines) and `versal-virt` (native) run the catch-most subset |
| `ci:qemu-virt` | the two `virt` cells' full suite and FF-A ACS (the change touched only that family) |
| `ci:qemu-versal` | the `versal-virt` full suite and FF-A ACS |
| `ci:aarch64` | every cell's full suite and FF-A ACS (a core AArch64 change) |
| `ci:all` | this plus the full M33MU matrix |

A label keeps applying on later pushes to the PR. Pushes to `main`, the nightly
schedule (via `nightly.yml`), and manual dispatch (with a `cell` input) run the
full matrix. The cells and the smoke subset live in
`tests/target/lib/scenario_matrix.py`, which `make test-target-a` also reads
(`WT_TIER=full` for the whole suite).

| Check name | What it proves |
|------------|----------------|
| `qemuvirt_psa_<engine>` | the Normal-world PSA client uses the selected engine through FF-A |
| `qemuvirt_tpm_<engine>_<profile>` | the Normal-world application sends real TPM 2.0 GetRandom, CreatePrimary, Sign, and full-profile PCR Extend/Read commands through FF-A and `SERVICE_TPM` to the isolated fwTPM |
| `qemuvirt_tpmneg_<engine>_<profile>` | the fwTPM round trip plus TPM state-band, provider-RAM, and execute-never isolation negatives |
| `qemuvirt_pkcs11_<engine>_<profile>` | the Normal-world application runs nine default or 40 full PKCS#11 cases through FF-A and the isolated provider |
| `qemuvirt_pkcs11neg_<engine>_<profile>` | the PKCS#11 suite plus state-band, provider-RAM, execute-never, and engine-appropriate restart/recovery negatives |
| `el3_<cell>_<engine>` | the EL3 image links under the symbol guard, then the tier's QEMU AArch64 scenarios run through `tests/target/run_suite.sh qemu-a` |
| `ffa_acs_<cell>_<engine>` | the Arm FF-A ACS groups (discovery, direct and indirect messaging, memory, notifications, interrupts) at their asserted floors (full tier only) |

To run a scenario locally, use `tests/target/run_qemu_a_scenario.sh <key>`
with `MACHINE`, `GIC`, `CPU`, and `WT_ENGINE` set as in the workflow.

## Host unit suites (per-suite checks)

`unit-tests.yml` reads `UNIT_SUITES` from `tests/host/Makefile` (via
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_resolve-wolfssl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ permissions:

jobs:
resolve:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 5
outputs:
matrix: ${{ steps.refs.outputs.matrix }}
Expand Down
180 changes: 180 additions & 0 deletions .github/workflows/aarch64-cross-compile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
name: AArch64 cross compilation

on:
# Pull requests run the AArch64 smoke tier; the ci:all, ci:aarch64,
# ci:qemu-virt, and ci:qemu-versal labels, pushes to main, the nightly
# schedule (workflow_call from nightly.yml), and manual dispatch run the full
# cell matrix and the FF-A ACS.
pull_request:
types: [opened, synchronize, reopened, labeled]
push:
branches: [main]
workflow_dispatch:
inputs:
cell:
description: AArch64 cell or family whose full matrix to run
type: choice
options: [all, qemu-virt, qemu-versal, virt-gicv2-a35, virt-gicv3-a72, versal-virt]
default: all
workflow_call:

permissions:
contents: read

concurrency:
group: aarch64-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
# Label-selected the same way m33mu.yml is: one select job reads the ci:*
# labels (ci:qemu-virt or ci:qemu-versal for a family's full matrix, ci:all
# or ci:aarch64 for every cell, no label for the smoke tier), the event, and
# the dispatch input, then one matrix job runs exactly those cells.
select:
name: qemu_a_select
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.p.outputs.matrix }}
steps:
- uses: actions/checkout@v4

- id: p
env:
PR_LABELS: ${{ join(github.event.pull_request.labels.*.name, ' ') }}
CELL_INPUT: ${{ inputs.cell }}
run: |
python3 tests/target/lib/scenario_matrix.py --selftest
matrix=$(python3 tests/target/lib/scenario_matrix.py --aarch64-plan)
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
printf '%s' "$matrix" | python3 -c 'import json, sys
for e in json.load(sys.stdin):
print(e["job"], "(" + e["engine"] + ")")'

interfaces-qemu-a:
name: qemuvirt_${{ matrix.scenario }}_${{ matrix.engine }}_${{ matrix.profile }}
if: >-
github.event_name != 'workflow_dispatch' || inputs.cell == '' ||
inputs.cell == 'all' || inputs.cell == 'qemu-virt' ||
inputs.cell == 'virt-gicv3-a72'
runs-on: ubuntu-latest
timeout-minutes: 45
container:
image: ghcr.io/wolfssl/wolfboot-ci-aarch64:v1.15
strategy:
fail-fast: false
matrix:
scenario: [positive, tpm, tpmneg, pkcs11, pkcs11neg]
engine: [native, hsm]
profile: [default, full]
env:
WT_ENGINE: ${{ matrix.engine }}
WT_CRYPTO_PROFILE: ${{ matrix.profile }}
WT_REQUIRE_SCENARIO_PASS: 1
MACHINE: virt
GIC: 3
CPU: cortex-a72
SMP: 1
steps:
- uses: actions/checkout@v4

- name: Trust the checked-out workspace
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Initialize wolfTrust dependencies
run: |
git config --global url."https://github.com/".insteadOf "git@github.com:"
git submodule update --init --single-branch lib/wolfSSL lib/wolfHSM lib/wolfCOSE lib/wolfPSA lib/wolfTPM lib/wolfPKCS11

- name: Toolchain and emulator versions
run: |
aarch64-none-elf-gcc --version | head -1
qemu-system-aarch64 --version | head -1

- name: Self-test the EL3 symbol guard and the expect library
run: |
tools/check-el3-symbols.sh --selftest
tests/target/lib/expect.sh --selftest

- name: Run the direct SPM interface scenario
run: tests/target/run_suite.sh qemu-a ${{ matrix.scenario }}

- name: Show the boot logs
if: always()
run: |
for f in logs/target-*.log; do
echo "== $f"
cat "$f" || true
done

qemu-a:
name: ${{ matrix.job }}
needs: select
runs-on: ubuntu-latest
# The serial suite takes 15-18 min per cell on the reference box; the
# per-scenario QEMU budgets are hang detectors, not expected runtimes.
timeout-minutes: 75
container:
image: ${{ matrix.image }}
strategy:
fail-fast: false
matrix:
include: ${{ fromJSON(needs.select.outputs.matrix) }}
env:
WT_ENGINE: ${{ matrix.engine }}
MACHINE: ${{ matrix.machine }}
GIC: ${{ matrix.gic }}
CPU: ${{ matrix.cpu }}
SMP: ${{ matrix.smp }}
steps:
- uses: actions/checkout@v4

- name: Trust the checked-out workspace
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"

- name: Initialize wolfTrust dependencies
run: |
git config --global url."https://github.com/".insteadOf "git@github.com:"
git submodule update --init --single-branch lib/wolfSSL lib/wolfHSM lib/wolfCOSE lib/wolfPSA lib/wolfTPM lib/wolfPKCS11

- name: Toolchain and emulator versions
run: |
aarch64-none-elf-gcc --version | head -1
qemu-system-aarch64 --version | head -1

- name: Self-test the EL3 symbol guard and the expect library
if: matrix.kind == 'suite'
run: |
tools/check-el3-symbols.sh --selftest
tests/target/lib/expect.sh --selftest

- name: Cross-build the EL3 monitor image (the symbol guard runs at link)
if: matrix.kind == 'suite'
run: make ARCH=aarch64 TARGET=${{ matrix.target }} WT_GIC_VERSION="$GIC" WT_CPU="$CPU" BUILD_DIR=build-aarch64-guard el3-image

- name: Cross-build the Versal TPM and PKCS11 interfaces
if: matrix.kind == 'suite' && matrix.target == 'versal'
run: |
make ARCH=aarch64 TARGET=versal WT_GIC_VERSION="$GIC" \
WT_CPU="$CPU" WT_PORT_BOOT_CPUS=1 WT_ENGINE=${{ matrix.engine }} CONFIG_TPM=y \
WT_ATTEST_COSE=0 BUILD_DIR=build-versal-tpm secure-image
make ARCH=aarch64 TARGET=versal WT_GIC_VERSION="$GIC" \
WT_CPU="$CPU" WT_PORT_BOOT_CPUS=1 CONFIG_PKCS11=y \
WT_ENGINE=${{ matrix.engine }} WT_ATTEST_COSE=0 \
BUILD_DIR=build-versal-pkcs11 secure-image

- name: Fetch the pinned Arm FF-A ACS once for the six groups
if: matrix.kind == 'acs'
run: |
tests/upstream/fetch_ffa_acs.sh "$GITHUB_WORKSPACE/.acs-cache"
echo "WT_FFA_ACS_CACHE=$GITHUB_WORKSPACE/.acs-cache" >> "$GITHUB_ENV"

- name: Run the AArch64 scenarios
run: tests/target/run_suite.sh qemu-a ${{ matrix.scenarios }}

- name: Show the boot logs
if: always()
run: |
for f in logs/target-*.log; do
echo "== $f"
cat "$f" || true
done
2 changes: 1 addition & 1 deletion .github/workflows/auto-pin-dependencies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ permissions:

jobs:
pin:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/core-port-split.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@ jobs:
git config --global --add safe.directory "$GITHUB_WORKSPACE"
git config --global url."https://github.com/".insteadOf git@github.com:

- name: Self-test the split and port-only-diff guards
- name: Self-test the guards and the scenario assertion library
run: |
tools/check-core-port-split.sh --selftest
tools/check-port-only-diff.sh --selftest
tools/check-docs-no-internal-links.sh --selftest
tools/check-el3-symbols.sh --selftest
tests/target/lib/expect.sh --selftest

- name: Enforce the core/port split (strict)
run: WT_SPLIT_STRICT=1 tools/check-core-port-split.sh
Expand Down
14 changes: 13 additions & 1 deletion .github/workflows/cross-compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ jobs:
git config --global url."https://github.com/".insteadOf git@github.com:
git submodule update --init --depth 1 --jobs 4 \
lib/wolfCOSE lib/wolfHSM lib/wolfPSA lib/wolfSSL \
lib/wolfhal
lib/wolfTPM lib/wolfPKCS11 lib/wolfhal
test -f lib/wolfTPM/src/fwtpm/fwtpm.c
test -f lib/wolfPKCS11/src/wolfpkcs11.c
- name: Build STM32H563 secure firmware
run: make -C tests/firmware/stm32h563 all TOOLPREFIX=arm-none-eabi-
- name: Validate the LTO gate, rebuild, and size reduction
Expand Down Expand Up @@ -119,3 +121,13 @@ jobs:
WT_CONFORMANCE=1 secure-image TOOLPREFIX=arm-none-eabi- \
BUILD_DIR=build_rt700_conf_$engine
done
- name: Build both interfaces with both crypto engines on both ports
run: |
for engine in native hsm; do
for target in stm32h563 mimxrt700; do
make TARGET="$target" CONFIG_TPM=y WT_ENGINE="$engine" \
WT_ATTEST_COSE=0 BUILD_DIR="build-$target-tpm-$engine" secure-image
make TARGET="$target" CONFIG_PKCS11=y WT_ENGINE="$engine" \
WT_ATTEST_COSE=0 BUILD_DIR="build-$target-pkcs11-$engine" secure-image
done
done
4 changes: 2 additions & 2 deletions .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
# type here: schedule / manual dispatch get the full 600s soak; PR pushes and
# merges get the 60s smoke that keeps the required checks fast.
select:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
outputs:
matrix: ${{ steps.pick.outputs.matrix }}
steps:
Expand All @@ -39,7 +39,7 @@ jobs:
fuzz:
name: fuzz_${{ matrix.name }}
needs: select
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
timeout-minutes: 20
strategy:
fail-fast: false
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
wolfcose:
name: wolfcose_integration_${{ matrix.name }}
needs: resolve
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
container:
image: ghcr.io/wolfssl/wolftrust-ci:latest-beb806af7628e02acee729632a74a7a3630f21fd
timeout-minutes: 30
Expand Down Expand Up @@ -69,7 +69,7 @@ jobs:
wolfpsa:
name: wolfpsa_integration_${{ matrix.name }}
needs: resolve
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
container:
image: ghcr.io/wolfssl/wolftrust-ci:latest-beb806af7628e02acee729632a74a7a3630f21fd
timeout-minutes: 30
Expand Down
Loading
Loading