Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
d424651
Pre-set ACCESSED and DIRTY flags in page table entries (#1067)
dywongcloud Jul 23, 2026
6a03ec8
Add supports for generating identity signing key (IDK_S) (#828)
sangho2 Jul 24, 2026
cc3925d
Improve handle management (#1106)
jaybosamiya-ms Jul 30, 2026
eed893e
Migrate in-memory file system to new backend (#1107)
jaybosamiya-ms Aug 3, 2026
0e50384
Fix checking of directory search/read perms (#1110)
jaybosamiya-ms Aug 4, 2026
7bcd3bc
Separate HEKI/HVCI from `litebox_platform_lvbs` (#1093)
sangho2 Aug 4, 2026
5f80f94
Fix handling of OP-TEE `ldelf` segment padding (#1112)
sangho2 Aug 5, 2026
e798442
Fix python test (#1143)
CvvT Aug 7, 2026
7af6242
Reduce locking contention over fd iterations (#1111)
jaybosamiya-ms Aug 12, 2026
4389d4d
Migrate 9p file system to new backend (#1113)
jaybosamiya-ms Aug 12, 2026
f5750e2
Join the spawned handles in tests (#1165)
jaybosamiya-ms Aug 13, 2026
9e197f0
Simplify via `zerocopy::FromZeros::new_box_zeroed` (#919)
lschuermann Aug 14, 2026
9732adf
Add bottom-up mmap to OP-TEE shim (#1153)
sangho2 Aug 14, 2026
4d6909e
Fix resource limit reads and updates (#1179)
CvvT Aug 17, 2026
0a13a99
Fix pipe2 fd-table race when the table is full (#1182)
CvvT Aug 17, 2026
a5e9ae2
Fix forced signal delivery (#1131)
sangho2 Aug 17, 2026
e33f6ff
optee: share TA binaries through a global UUID map (#1142)
praveen-pk Aug 18, 2026
12aa111
Pin GitHub Actions to full-length commit SHAs (#1192)
danfiedler-msft Aug 19, 2026
7f017eb
Bump the github-actions group with 3 updates (#1206)
dependabot[bot] Aug 20, 2026
e58ae00
Skip empty embedded TA binaries during registration (#1197)
praveen-pk Aug 20, 2026
4e55097
Switch layered to overlay filesystem (#1195)
jaybosamiya-ms Aug 22, 2026
8671b24
Fix the OOM handling of page-sized memory allocation (#1219)
sangho2 Aug 26, 2026
a58c797
Retire legacy `FileSystem` trait (#1226)
jaybosamiya-ms Aug 28, 2026
49f7231
Switch to explicit file system `Context`s (#1231)
jaybosamiya-ms Aug 29, 2026
f333acc
Bump taiki-e/install-action from 2.86.3 to 2.86.5 in the github-actio…
dependabot[bot] Aug 31, 2026
b3bf5ca
Restrict exception fixups to synchronous faults (#1191)
sangho2 Sep 1, 2026
8a1ab66
Improve CI usability for semver-checks across forks (#1249)
jaybosamiya-ms Sep 1, 2026
fde3bb4
LVBS: Use reference counters for page tables (#1246)
sangho2 Sep 1, 2026
377309f
Fix races in Linux file descriptor duplication (#1181)
CvvT Sep 2, 2026
831b301
Fix Windows exception callback argument passing (#1256)
CvvT Sep 2, 2026
d76bcc8
Add support for direct memory copy between VTL0 and VTL1-userspace (#…
sangho2 Sep 2, 2026
beafa8c
Fix socketpair fd-table race when the table is full (#1252)
CvvT Sep 3, 2026
e286947
Fix duplicated directory descriptor offsets (#1275)
CvvT Sep 4, 2026
ba6d21e
Direct data copy between normal-world shared memory and TA memory (#1…
sangho2 Sep 4, 2026
15344cf
Validate clone3 stack arguments before publishing parent TID (#1280)
CvvT Sep 4, 2026
4f3184c
Fix race in TA classification to ensure single-instance loading (#1292)
sangho2 Sep 4, 2026
a990948
Fix stack alignment in LVBS boot trampolines (#1296)
sangho2 Sep 4, 2026
27bfc40
Merge origin/main into ulitebox
jaybosamiya-ms Sep 4, 2026
ac2c9bc
Fix OP-TEE IDK randomness
jaybosamiya-ms Sep 5, 2026
d38578a
Fix ratchet due to merge
jaybosamiya-ms Sep 5, 2026
8dd8b2f
Fix IDK signing test
jaybosamiya-ms Sep 5, 2026
8b2c2a6
minor fixup unused import
jaybosamiya-ms Sep 5, 2026
04f3b35
fixup conflict resolution
jaybosamiya-ms Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
groups:
github-actions:
patterns: ["*"]
schedule:
interval: "weekly"
cooldown:
default-days: 7
74 changes: 51 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@ jobs:
RUSTDOCFLAGS: -Dwarnings
steps:
- name: Check out repo
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Use Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
- name: Set up Rust
run: |
rustup toolchain install $(awk -F'"' '/channel/{print $2}' rust-toolchain.toml) --profile minimal --no-self-update --component rustfmt,clippy --target x86_64-unknown-linux-gnu
- name: Set up Nextest
uses: taiki-e/install-action@v2
uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with:
tool: nextest@${{ env.NEXTEST_VERSION }}
- name: Install iperf3
Expand All @@ -49,16 +49,16 @@ jobs:
- name: Install AArch64 binutils
run: |
sudo apt install -y binutils-aarch64-linux-gnu
- uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- name: Cache custom out directories
uses: actions/cache@v5
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
target/*/build/litebox_runner_linux_userland-*/out
key: custom-out-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('**/litebox_syscall_rewriter/**/*.rs') }}
- run: ./.github/tools/github_actions_run_cargo fmt
- run: |
./.github/tools/github_actions_run_cargo clippy --all-targets --all-features --workspace --exclude litebox_runner_lvbs --exclude litebox_runner_optee_on_linux_userland
./.github/tools/github_actions_run_cargo clippy --all-targets --all-features --workspace --exclude litebox_runner_lvbs --exclude litebox_runner_snp --exclude litebox_runner_optee_on_linux_userland
./.github/tools/github_actions_run_cargo clippy --all-targets --all-features -p litebox_runner_optee_on_linux_userland
# We exclude `litebox_runner_lvbs` because it requires a custom target and nightly
# features. `build_and_test_lvbs` covers it.
Expand All @@ -76,7 +76,7 @@ jobs:
# aren't included in nextest at the moment. See relevant discussion at
# https://github.com/nextest-rs/nextest/issues/16
- name: Build documentation (fail on warnings)
run: ./.github/tools/github_actions_run_cargo doc --no-deps --all-features --document-private-items --workspace --exclude litebox_runner_lvbs
run: ./.github/tools/github_actions_run_cargo doc --no-deps --all-features --document-private-items --workspace --exclude litebox_runner_lvbs --exclude litebox_runner_snp

build_and_test_arm64:
name: Build and Test (AArch64)
Expand All @@ -100,12 +100,12 @@ jobs:
-p litebox_runner_linux_userland
steps:
- name: Check out repo
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Set up Rust
run: |
rustup toolchain install $(awk -F'"' '/channel/{print $2}' rust-toolchain.toml) --profile minimal --no-self-update --component rustfmt,clippy
- name: Set up Nextest
uses: taiki-e/install-action@v2
uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with:
tool: nextest@${{ env.NEXTEST_VERSION }}
- name: Install iperf3
Expand All @@ -114,7 +114,7 @@ jobs:
- name: Install diod
run: |
sudo apt install -y diod
- uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- name: Cache custom out directories
uses: actions/cache@v5
with:
Expand Down Expand Up @@ -145,7 +145,7 @@ jobs:
RUSTFLAGS: -Dwarnings
steps:
- name: Check out repo
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
# LVBS requires a nightly toolchain because:
# 1. It uses a custom target (x86_64_vtl1.json) for bare-metal VTL1 kernel development
# 2. The custom target requires `-Z build-std` to build core/alloc from source
Expand All @@ -165,12 +165,12 @@ jobs:
rustup override set ${RUST_CHANNEL}
rustup show
- name: Set up Nextest
uses: taiki-e/install-action@v2
uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with:
tool: nextest@${{ env.NEXTEST_VERSION }}
- uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- name: Cache custom out directories
uses: actions/cache@v5
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: |
target/*/build/litebox_runner_linux_userland-*/out
Expand Down Expand Up @@ -218,15 +218,15 @@ jobs:
-p litebox_runner_windows_userland
steps:
- name: Check out repo
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Set up Rust
run: |
rustup toolchain install $(awk -F'"' '/channel/{print $2}' rust-toolchain.toml) --profile minimal --no-self-update --component rustfmt,clippy --target x86_64-pc-windows-msvc
- name: Set up Nextest
uses: taiki-e/install-action@v2
uses: taiki-e/install-action@ba47c86ac325773530516bb756137ac718732518 # v2.86.5
with:
tool: nextest@${{ env.NEXTEST_VERSION }}
- uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- run: cargo clippy --locked --verbose --all-targets --all-features ($env:WINDOWS_CRATES -split ' ')
- run: cargo build --locked --verbose ($env:WINDOWS_CRATES -split ' ')
- run: cargo nextest run --locked --profile ci ($env:WINDOWS_CRATES -split ' ')
Expand All @@ -238,16 +238,39 @@ jobs:
- name: Build documentation (fail on warnings)
run: cargo doc --locked --verbose --no-deps --all-features --document-private-items ($env:WINDOWS_CRATES -split ' ')

build_and_test_snp:
name: Build and Test SNP
runs-on: ubuntu-latest
env:
RUSTFLAGS: -Dwarnings
steps:
- name: Check out repo
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Set up Rust
run: |
RUST_CHANNEL=$(awk -F'"' '/channel/{print $2}' litebox_runner_snp/rust-toolchain.toml)
rustup toolchain install ${RUST_CHANNEL} --profile minimal --no-self-update --component rustfmt,clippy --target x86_64-unknown-none
rustup component add rust-src --toolchain ${RUST_CHANNEL}-x86_64-unknown-linux-gnu
rustup default ${RUST_CHANNEL}
rustup override set ${RUST_CHANNEL}
rustup show
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- run: ./.github/tools/github_actions_run_cargo clippy --all-features --target litebox_runner_snp/target.json --manifest-path=litebox_runner_snp/Cargo.toml -Zbuild-std=core,compiler_builtins,alloc
- run: |
./.github/tools/github_actions_run_cargo build -Zbuild-std=core,compiler_builtins,alloc -Zbuild-std-features=compiler-builtins-mem --manifest-path=litebox_runner_snp/Cargo.toml --target litebox_runner_snp/target.json
- name: Build documentation (fail on warnings)
run: ./.github/tools/github_actions_run_cargo doc --no-deps --all-features --document-private-items

confirm_no_std:
name: Confirm no_std
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Set up Rust
run: |
rustup toolchain install $(awk -F'"' '/channel/{print $2}' rust-toolchain.toml) --profile minimal --no-self-update --target x86_64-unknown-none
- uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- name: Confirm that we haven't accidentally pulled in std into LiteBox
run: |
# Essentially, we run a build on a target that simply does NOT have
Expand Down Expand Up @@ -333,10 +356,11 @@ jobs:
# access since it needs to actually access the file-system, pull in
# relevant files, and then actually trigger LiteBox itself.
#
# - `litebox_shim_optee` is expected to work with
# `litebox_platform_lvbs` (`no_std`) and
# `litebox_platform_linux_userland` (for debugging) which
# depends on `litebox_platform_multiplex`.
# - `litebox_shim_optee` is `no_std`, but the builtin
# `x86_64-unknown-none` target is soft-float, which its crypto
# dependencies cannot lower. The shipped target,
# `litebox_runner_lvbs/x86_64_vtl1.json`, satisfies that
# requirement.
#
# - `litebox_shim_windows` itself is `no_std` but depends on
# `litebox_platform_multiplex`.
Expand All @@ -351,6 +375,9 @@ jobs:
# - `litebox_runner_snp` is temporarily disabled until SNP networking
# can use a kernel-mode broker
#
# - `litebox_service_heki` is excluded for the same reason as
# `litebox_shim_optee` above; it also pulls in crypto dependencies.
#
# - `dev_tests` is meant to only be used for tests, and thus can
# safely use std.
#
Expand Down Expand Up @@ -379,6 +406,7 @@ jobs:
-not -path './litebox_syscall_rewriter/Cargo.toml' \
-not -path './litebox_packager/Cargo.toml' \
-not -path './litebox_runner_snp/Cargo.toml' \
-not -path './litebox_service_heki/Cargo.toml' \
-not -path './dev_tests/Cargo.toml' \
-not -path './dev_bench/Cargo.toml' \
-print0 | \
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
# If you do not check out your code, Copilot will do this for you.
steps:
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Set up Rust
run: |
rustup toolchain install $(awk -F'"' '/channel/{print $2}' rust-toolchain.toml) --profile minimal --no-self-update --component rustfmt,clippy
Expand Down
103 changes: 100 additions & 3 deletions .github/workflows/semver-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ on:
- synchronize
- reopened
- edited
issue_comment:
types:
- created
- edited
- deleted
merge_group:

# If a new commit is pushed to the branch before ongoing runs finish, cancel the ongoing runs
Expand All @@ -24,12 +29,63 @@ env:
CARGO_TERM_COLOR: always

jobs:
rerun_fork_check:
name: Re-run fork semver check
if: >-
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
(github.event.action == 'deleted' ||
contains(github.event.comment.body, ':robot: SemverChecks :robot:'))
permissions:
actions: write
contents: read
pull-requests: read
issues: read
runs-on: ubuntu-latest
steps:
- name: Re-run the pull request check
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
API_URL: ${{ github.api_url }}
REPOSITORY: ${{ github.repository }}
PR_NUMBER: ${{ github.event.issue.number }}
run: |
set -euo pipefail
PR=$(curl --fail-with-body -sS \
-H "Authorization: Bearer $GH_TOKEN" \
-H 'Accept: application/vnd.github+json' \
"$API_URL/repos/$REPOSITORY/pulls/$PR_NUMBER")
IS_OPEN=$(jq -r '.state == "open"' <<<"$PR")
IS_FORK=$(jq -r '.head.repo.fork == true' <<<"$PR")
COMMENTER_IS_AUTHOR=$(jq -r --arg login "${{ github.event.comment.user.login }}" '.user.login == $login' <<<"$PR")
COMMENTER_IS_MAINTAINER=$(case '${{ github.event.comment.author_association }}' in OWNER|MEMBER|COLLABORATOR) echo true;; *) echo false;; esac)
if [ "$IS_OPEN" != true ] || [ "$IS_FORK" != true ] || \
{ [ "$COMMENTER_IS_AUTHOR" != true ] && [ "$COMMENTER_IS_MAINTAINER" != true ]; }; then
echo 'Ignoring comment from an unauthorized user or on a non-open fork PR.'
exit 0
fi
HEAD_SHA=$(jq -r '.head.sha' <<<"$PR")
RUN_ID=$(curl --fail-with-body -sS \
-H "Authorization: Bearer $GH_TOKEN" \
-H 'Accept: application/vnd.github+json' \
"$API_URL/repos/$REPOSITORY/actions/workflows/semver-checks.yml/runs?event=pull_request&head_sha=$HEAD_SHA&per_page=10" | \
jq -r --argjson pr_number "$PR_NUMBER" '[.workflow_runs[] | select(any(.pull_requests[]?; .number == $pr_number))] | first | .id // empty')
if [ -z "$RUN_ID" ]; then
echo 'No pull_request semver-checks run exists for this commit yet.' >&2
exit 1
fi
curl --fail-with-body -sS -X POST \
-H "Authorization: Bearer $GH_TOKEN" \
-H 'Accept: application/vnd.github+json' \
"$API_URL/repos/$REPOSITORY/actions/runs/$RUN_ID/rerun"

semver_checks:
name: Check SemVer Correctness
if: ${{ github.event_name != 'issue_comment' }}
runs-on: ubuntu-latest
steps:
- name: Check out repo
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Determine baseline ref
id: baseline
run: |
Expand Down Expand Up @@ -101,7 +157,7 @@ jobs:
# https://api.github.com/repos/${{ github.repository_owner }}/${{ github.event.repository.name }}/issues/${{ github.event.number }}/reactions \
# -d '{"content":"${{ steps.semver_check.outputs.reaction }}"}'
- name: Delete old semver checks comments, if any
if: github.event_name == 'pull_request'
if: ${{ github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork }}
run: |
# Get the old comments
COMMENT_IDS=$(curl -L \
Expand All @@ -120,7 +176,7 @@ jobs:
https://api.github.com/repos/${{ github.repository_owner }}/${{ github.event.repository.name }}/issues/comments/$ID
done
- name: Add a new issue comment if needed
if: github.event_name == 'pull_request'
if: ${{ github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork }}
run: |
BASE_NOTE=""
if [ "${{ steps.baseline.outputs.ref }}" != "main" ] && [ "${{ steps.baseline.outputs.ref }}" != "ulitebox" ]; then
Expand All @@ -141,3 +197,44 @@ jobs:
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/${{ github.repository_owner }}/${{ github.event.repository.name }}/issues/${{ github.event.number }}/comments \
-d "$(printf '%s' "$BODY" | jq -sR '{body: .}')"
- name: Require documentation from fork
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork }}
env:
API_URL: ${{ github.api_url }}
REPOSITORY: ${{ github.repository }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
set -euo pipefail
BASE_NOTE=""
if [ "${{ steps.baseline.outputs.ref }}" != "main" ] && [ "${{ steps.baseline.outputs.ref }}" != "ulitebox" ]; then
BASE_NOTE=":information_source: **Note:** This semver check was run against the \`${{ steps.baseline.outputs.ref }}\` branch, not \`main\` or \`ulitebox\`.\n\n"
fi
if [ "${{ steps.packages.outputs.has_packages }}" != "true" ]; then
BODY="$(echo -e "${BASE_NOTE}"':robot: SemverChecks :robot: No semver-relevant crate changes detected; skipped cargo-semver-checks.')"
elif [ -s /tmp/semver-checks-stdout ]; then
BODY="$(echo -e "${BASE_NOTE}"':robot: SemverChecks :robot: :warning: Potential breaking API changes detected :warning:\n\n<details><summary>Click for details</summary>\n\n```'"$(cat /tmp/semver-checks-stdout)"'\n```\n</details>')"
else
BODY="$(echo -e "${BASE_NOTE}"':robot: SemverChecks :robot: No breaking API changes detected\n\nNote: this does not mean API is unchanged, or even that there are no breaking changes; simply, none of the detections triggered.')"
fi
PREFIX='Documenting semver-checks CI text here:'
COMMENTS=$(curl --fail-with-body -sS \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H 'Accept: application/vnd.github+json' \
"$API_URL/repos/$REPOSITORY/issues/$PR_NUMBER/comments?per_page=100&sort=created&direction=desc")
HAS_SEMVER_COMMENT=$(jq -r '[.[] | select(.body | contains(":robot: SemverChecks :robot:"))] | length > 0' <<<"$COMMENTS")
if [ "$HAS_SEMVER_COMMENT" = "false" ] && [ ! -s /tmp/semver-checks-stdout ]; then
echo 'No breaking changes and no prior semver-checks comment; documentation is unnecessary.'
exit 0
fi
LAST=$(jq -r --arg prefix "$PREFIX" '[.[] | select(.body | startswith($prefix))] | last | if . then .body else "" end' <<<"$COMMENTS")
EXPECTED=$(printf '%s\n\n%s' "$PREFIX" "$BODY")
if [ "$LAST" != "$EXPECTED" ]; then
echo 'The latest semver documentation comment is missing or out of date.' >&2
{
printf '## Semver-checks documentation required\n\n'
printf 'Copy and paste the following as a comment on the PR (not in the PR description):\n\n'
printf '````markdown\n%s\n````\n' "$EXPECTED"
} >> "$GITHUB_STEP_SUMMARY"
printf '\nCopy and paste this as a comment on the PR (not in the PR description):\n\n```markdown\n%s\n```\n' "$EXPECTED"
exit 1
fi
Loading
Loading