Skip to content

ci: escape suite for firecracker on hosted runners, on every change - #57

Merged
chxmxii merged 1 commit into
chxperiments:mainfrom
KoLDXr00T:ci/escape-hosted-firecracker
Oct 23, 2026
Merged

chxmxii merged 1 commit into
chxperiments:mainfrom
KoLDXr00T:ci/escape-hosted-firecracker

Conversation

@KoLDXr00T

@KoLDXr00T KoLDXr00T commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Part of #31.

GitHub's hosted Ubuntu runners expose /dev/kvm, and the firecracker backend needs nothing beyond KVM, vsock, podman and crun. This adds .github/workflows/escape.yml, which runs security/escape-test.sh for firecracker under strict and standard isolation on every pull request and push to main, plus nightly and on demand.

Why

What it does

  1. Makes /dev/kvm usable for the runner user (udev rule), loads vhost_vsock, and adds a subordinate UID range large enough for strict mode (box doctor's suggestion).
  2. Builds a static box.
  3. Runs security/escape-test.sh ./box <isolation> firecracker.

It needs no secrets, so PRs from forks run it too.

What it doesn't change

security.yml stays as it is for the podman and krun backends. They need crun built with libkrun, which stock Ubuntu's crun lacks, so they still need the self-hosted runner #31 asks for. This PR does not close #31: of the backends × isolation matrix there, it covers firecracker × both modes.

Only security.yml's header comment changes. SECURITY.md's "Tests" section now says which backends run where; it previously said the suite "does not run in the hosted CI".

The krun symlink

Until #56 lands, box up requires krun on PATH whatever the backend, so the job symlinks krun to crun. The step's comment says to remove that line once #56 merges, so the job then stands for a firecracker-only host. The same job without the symlink and with #56 applied also found no escapes: https://github.com/KoLDXr00T/bluebox/actions/runs/39483949749

Checked on the fork

…change

GitHub's hosted Ubuntu runners expose /dev/kvm, and the firecracker backend
needs nothing more than KVM, vsock, podman and crun. escape.yml runs the
escape suite there under strict and standard isolation, on every pull
request and push to main as well as nightly; each job takes about a minute.
Until now the suite ran only on the self-hosted kvm runner, nightly, and
that runner has not picked up a job in days.

The podman and krun backends need crun built with libkrun, which those
runners lack, so security.yml keeps running them on the self-hosted runner.

Until chxperiments#56 lands, box up needs krun on PATH whatever the backend, so the job
symlinks krun to crun; the step says to remove that once it does.
@chxmxii
chxmxii merged commit 1c8f71c into chxperiments:main Oct 23, 2026
7 checks passed
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.

A self-hosted KVM runner for the nightly escape suite

2 participants