Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
254 commits
Select commit Hold shift + click to select a range
131fb24
Merge remote-tracking branch 'origin/main' into market/release-index
senseix21 Sep 24, 2026
b1533e8
fix(toolkit): ship the store icon mask the icon table includes
senseix21 Sep 24, 2026
1d95cf3
fix(store): end the search-bar match as a statement
senseix21 Sep 24, 2026
5d9e2d6
fix(market): track the signed index only when the tree has one
senseix21 Sep 24, 2026
d221a0d
fix(market): keep nonos_ed25519, which verify/crypto.rs still uses
senseix21 Sep 24, 2026
ad49205
abi: publish the twenty-five hardware and time gates the kernel applies
eKisNonos Sep 26, 2026
dc64cb1
abi: publish MkDevRootLocal as EnrolDevRoot, the gate the kernel applies
eKisNonos Sep 26, 2026
6a2b83b
mk: pick the qemu accelerator from the host, and say which in doctor
eKisNonos Sep 26, 2026
7400cfa
Merge branch 'linux/frame-words-pid-arg' into linux/store-install
eKisNonos Sep 26, 2026
2678914
Merge branch 'mk/host-accel' into linux/store-install
eKisNonos Sep 26, 2026
beffb5f
Merge branch 'crypto/zk-group-order' into linux/store-install
eKisNonos Sep 26, 2026
6c49946
Merge branch 'abi/caps-any-contract' into linux/store-install
eKisNonos Sep 26, 2026
a3b8dab
attest: take only a STARK against the vendor root in a STARK build
eKisNonos Sep 26, 2026
a8cd3c0
local_build: mint a local proof for the ambient capabilities only
eKisNonos Sep 26, 2026
a10c5b5
crypto: verify a SHA-1 PKCS#1 v1.5 signature made over a DigestInfo
eKisNonos Sep 26, 2026
a45d63b
linux: make the proof crate compile, and run it in CI
eKisNonos Sep 26, 2026
efccb74
inflate: split a gzip file into its members and their byte ranges
eKisNonos Sep 26, 2026
35c85c6
linux: install a package only when a signed Alpine index vouches for it
eKisNonos Sep 26, 2026
c6ced1e
Merge #544 (market/release-index) into linux/store-install
eKisNonos Sep 26, 2026
8031840
market: exempt a release from shipping a proof by namespace, not by arch
eKisNonos Sep 26, 2026
d8f2eed
Merge #545 (store/app-store) into linux/store-install
eKisNonos Sep 26, 2026
73c677c
init: raise the drain from a syscall only with interrupts off
eKisNonos Sep 26, 2026
df8729c
install: re-ask the market, pin its hash, and fetch what a package needs
eKisNonos Sep 26, 2026
5ac3518
tpm: keep the kernel's machine-key labels out of CryptoMachineKey's r…
eKisNonos Sep 26, 2026
12cb792
setup: consent once per machine to running what it installs
eKisNonos Sep 26, 2026
d878f29
store: open what a package installed, and leave consent to setup
eKisNonos Sep 26, 2026
8bd45ad
nym: reach the validator by a pinned address, never a clearnet lookup
eKisNonos Sep 26, 2026
dc2f94e
linux: fetch packages from a mirror by address, never by name
eKisNonos Sep 26, 2026
b904661
market: catalogue the Alpine release the installer fetches from
eKisNonos Sep 26, 2026
338a46e
foreign: log the capabilities a guest holds, read back after install
eKisNonos Sep 26, 2026
568ba41
desktop_shell: size the launcher table for the store entry #545 added
eKisNonos Sep 26, 2026
51ffa1c
launch: refuse a package name that starts with a dot, as install does
eKisNonos Sep 26, 2026
b9fc0e0
lockfiles: record what the desktop shell and net_nym already depend on
eKisNonos Sep 26, 2026
9e1fbc8
init: spawn the desktop after setup without a second compositor
eKisNonos Sep 26, 2026
4382fe5
lockfiles: record what audio, audio_player and the wallet depend on
eKisNonos Sep 26, 2026
3a99ae7
init: with first-boot setup, start the apps after the desktop it hand…
eKisNonos Sep 26, 2026
ab5dc84
setup: list the installed-software step, and say whether it has the keys
eKisNonos Sep 26, 2026
5d18ae3
setup: ask for the keyboard until it is held
eKisNonos Sep 26, 2026
ab7d4a8
setup: name the installed-software choice on the review screen
eKisNonos Sep 26, 2026
292d804
store: drop AttestRead from the manifest
eKisNonos Sep 26, 2026
12b8861
setup: an amnesic machine does not keep consent either
eKisNonos Sep 26, 2026
3ef223e
services: sleep, not only yield, while a capsule owes the kernel a reply
eKisNonos Sep 26, 2026
e6d7652
vfs: stage the disk at device speed, and say when it is done
eKisNonos Sep 26, 2026
1f13bd7
app_skeleton: ask vfs whether the store has finished loading
eKisNonos Sep 26, 2026
c0221ff
setup: wait for the disk before deciding there is no earlier consent
eKisNonos Sep 26, 2026
09c9a02
setup: overwrite the consent token, since the disk cannot drop it
eKisNonos Sep 26, 2026
feb68d8
nonos-mk: take the lockfile that records the marketplace ABI at 0.3.0
eKisNonos Sep 26, 2026
66f2fe8
linux_guests: guests that attack the personality on purpose
eKisNonos Sep 26, 2026
39d4452
linux_guests: a filesystem escape probe, and one suite for a boot
eKisNonos Sep 26, 2026
cb412c6
nonos-mk: take CAPSULE_MK_FILE
eKisNonos Sep 27, 2026
fdfe224
store-pack: refuse a store vfs would refuse
eKisNonos Sep 27, 2026
3201c77
linux: log a path clamped at the root, and let the image name a guest
eKisNonos Sep 27, 2026
508dc8d
linux_guests: sign, enrol and pack the guests for a test image
eKisNonos Sep 27, 2026
5b29232
tcb: count ring 0 from what rustc compiled, and gate its growth
eKisNonos Sep 27, 2026
47f90aa
linux_guests: say whether a forked child runs
eKisNonos Sep 27, 2026
f81e3c2
linux: host a family of processes, so a forked child runs
eKisNonos Sep 27, 2026
824bedb
lockfiles: record nonos-stark at 0.2.0 in the enrollment tool
eKisNonos Sep 27, 2026
5a23127
linux_guests: two address spaces after a fork, and nothing between them
eKisNonos Sep 27, 2026
3ffa36e
linux: give the image's boot program its arguments
eKisNonos Sep 27, 2026
cf4576b
linux_guests: busybox from the store, and a boot command with arguments
eKisNonos Sep 27, 2026
f8c3ab4
linux: name an unserved call by number when the table has no name for it
eKisNonos Sep 27, 2026
0c4e4eb
linux: a read on an empty pipe waits, and ends when no writer is left
eKisNonos Sep 27, 2026
a2b697b
linux: refuse MAP_FIXED at page zero instead of mapping elsewhere
eKisNonos Sep 27, 2026
aeb91ba
linux: give a forked child its parent's thread pointer
eKisNonos Sep 27, 2026
bd3dae6
linux: follow symbolic links the image lists
eKisNonos Sep 27, 2026
c7cde11
linux_guests: carry busybox's applet links in a guest-test image
eKisNonos Sep 27, 2026
37166e6
linux: answer implicit directories, and list links in them
eKisNonos Sep 27, 2026
e14a979
linux: drop the unused EXEC_BASE re-export
eKisNonos Sep 27, 2026
2071de9
linux_guests: take the boot command from a file of arguments
eKisNonos Sep 27, 2026
d4466bf
vfs: refuse any path with a .. component
eKisNonos Sep 27, 2026
fbde30e
linux: never make unproven file bytes executable through mprotect
eKisNonos Sep 27, 2026
7165cbb
linux_guests: a tampered program the personality must refuse
eKisNonos Sep 27, 2026
52f82de
lean: state T2, and prove it false for the private-leaf verifier
eKisNonos Sep 27, 2026
ef53873
stark_proofs: the public-leaf gate refuses another image's slot
eKisNonos Sep 27, 2026
3007832
attest: admit an image only if its own measurement is enrolled (T2)
eKisNonos Sep 27, 2026
1eac9dc
check_attest_params: look where the stale copies were hiding
eKisNonos Sep 27, 2026
b3fbb17
verification: one register of what the security trusts unproven
eKisNonos Sep 27, 2026
19c0be8
scripts: name every control that exists and does not run
eKisNonos Sep 27, 2026
6ea0f36
tools: a proof coverage ratchet over extracted code
eKisNonos Sep 27, 2026
207a33e
iommu: give each driver capsule its own domain
eKisNonos Sep 27, 2026
24e72e6
paging: read the asid and root of the cpu asking, not the last one
eKisNonos Sep 27, 2026
1d4eb38
xhci: assert Memory Space with Bus Master
eKisNonos Sep 27, 2026
b3f6121
mk: the shipping image runs every core
eKisNonos Sep 27, 2026
05eabcc
process: the timer never waits on a lock boot holds with interrupts on
eKisNonos Sep 27, 2026
8c1c1aa
linux: map executable pages from the bytes that were proved
eKisNonos Sep 27, 2026
bb829a1
linux_guests: a dynamically linked program under the real musl loader
eKisNonos Sep 27, 2026
4768585
input: believe an input frame only from the input router's pid
eKisNonos Sep 27, 2026
0020a25
linux: wl_output, and Wayland input from the router on focus
eKisNonos Sep 27, 2026
3e1348c
linux: give app.linux what a window needs, and present via compositor
eKisNonos Sep 27, 2026
8b03d87
linux: persist an installed program and its proof as they land
eKisNonos Sep 27, 2026
2ee15eb
mk: capture every networked run, and a tool to read what it sent
eKisNonos Sep 27, 2026
3699b07
procstat: say less about other processes than MkAttestEntries does
eKisNonos Sep 27, 2026
3ba3322
stark_proofs: the digest form of the gate binds the same member
eKisNonos Sep 27, 2026
d4358d7
Merge origin/main (#559 to #563) before the build
eKisNonos Sep 27, 2026
81e8dd4
linux: name wl_output among unserved objects, drop a dead re-export
eKisNonos Sep 27, 2026
7bd3a56
coverage: syscall and Wayland numbers that may only rise
eKisNonos Sep 27, 2026
847079e
linux: park sleeps instead of stalling the family, and real clocks
eKisNonos Sep 27, 2026
8f6b65f
linux: keep installs in RAM; the store at rest is not encrypted
eKisNonos Sep 27, 2026
dcd80f5
vfs: nothing reaches the disk on an amnesic boot
eKisNonos Sep 27, 2026
668fe30
process: keep a parked guest's frame out of the scheduler's resume slot
eKisNonos Sep 27, 2026
ec7eb7c
linux_guests: a probe that hears nothing does not pass
eKisNonos Sep 27, 2026
179d458
tools: what a boot left on disk, from the image's store table
eKisNonos Sep 27, 2026
c7c6e84
linux: a family counts its own pids
eKisNonos Sep 27, 2026
9bf5aa1
linux: clocks from the family's start, and one statfs for everyone
eKisNonos Sep 27, 2026
2db5518
linux: scratch directories of each family's own, and a read-only tree
eKisNonos Sep 27, 2026
d701e14
linux: one file saying what every served call discloses
eKisNonos Sep 27, 2026
e785840
linux_guests: a fingerprinter, a sibling through a shared name, a clock
eKisNonos Sep 27, 2026
396639a
tools: a mutant per control, and the line its guest must print
eKisNonos Sep 27, 2026
4cb68a7
docs: the store at rest is plaintext, where the docs said encrypted
eKisNonos Sep 27, 2026
c4d9583
interrupts: a timer snapshot is spent once its own frame resumes
eKisNonos Sep 27, 2026
e88419b
sched: a tick preempts user mode only
eKisNonos Sep 27, 2026
92818e8
assets: the phones' faces and section photographs, for the wallet
eKisNonos Sep 27, 2026
89435a8
wallet: the Etna tokens, faces and type roles
eKisNonos Sep 27, 2026
9676f78
wallet: the type role table in a file of its own
eKisNonos Sep 27, 2026
9f71b70
process: exec is its own answer, not u64::MAX
eKisNonos Sep 27, 2026
ddbc1b9
wallet: add roles.rs, which the role-table split named and left out
eKisNonos Sep 27, 2026
d78571b
crypto: seed from every entropy source at once, and reseed on schedule
eKisNonos Sep 27, 2026
70b4498
ipc: a capsule can be held to the peers it may reach
eKisNonos Sep 27, 2026
19bc4d2
linux: every file its own inode, so dlopen loads what it is asked for
eKisNonos Sep 27, 2026
79dbeb6
vfs: a Linux family's scratch directories are listed to it alone
eKisNonos Sep 27, 2026
b61fa52
store: blend the active tab instead of writing it translucent
eKisNonos Sep 27, 2026
7ce4d7f
std_proof: a large allocation, file I/O and randomness, beside threads
eKisNonos Sep 27, 2026
1aaa149
wallet: the Etna parts: action, rule, label, tile, fact, value, quiet
eKisNonos Sep 27, 2026
521f715
wallet: the Etna frame, and Home and Welcome drawn on it
eKisNonos Sep 27, 2026
3badb88
wallet: Receive on the Etna frame, and a frame that scrolls
eKisNonos Sep 27, 2026
4527d36
process manager: no End Process button on a process it will not end
eKisNonos Sep 27, 2026
3ab3fcd
wallet: on a short window the photograph shows its middle
eKisNonos Sep 27, 2026
4024c94
wallet: the arrow and page keys scroll an Etna screen
eKisNonos Sep 27, 2026
67c9602
wallet: add frame_foot.rs, which 3ab3fcd4c declared and left out
eKisNonos Sep 27, 2026
4a8f57c
toolkit: read the JPEG quantisation table in natural order
eKisNonos Sep 27, 2026
04ab1ca
toolkit: scale an image to cover a surface at its own aspect
eKisNonos Sep 27, 2026
96e73c1
wallpaper: default to special-variant-9 and fill the screen properly
eKisNonos Sep 27, 2026
a537ba6
shell: act on the Timezone, Sound, Volume and Notifications settings
eKisNonos Sep 27, 2026
602c065
settings: show only settings that something acts on
eKisNonos Sep 27, 2026
10b22e5
setup: record that the machine's keys were made
eKisNonos Sep 27, 2026
fc0413c
settings: fit the notes that ran off their cards
eKisNonos Sep 27, 2026
b63d61d
iommu: set the snoop bit only on a unit that reports snoop control
eKisNonos Sep 27, 2026
52a7d27
linux: wait for the store before deciding no boot guest was named
eKisNonos Sep 27, 2026
fef6f9f
broker: turn bus mastering off when a device is released
eKisNonos Sep 27, 2026
4a25839
broker: do not hand IOVAs to a virtio device that bypasses the IOMMU
eKisNonos Sep 27, 2026
70b35d7
Revert "broker: do not hand IOVAs to a virtio device that bypasses th…
eKisNonos Sep 27, 2026
193b957
iommu lane: put the virtio devices behind the vIOMMU; the GPU takes b…
eKisNonos Sep 27, 2026
34732b7
linux: read the boot guest only once the store has settled
eKisNonos Sep 27, 2026
b162f24
linux: wait up to 300 s for the store to settle
eKisNonos Sep 27, 2026
e5e416b
linux: log how long the store took to settle
eKisNonos Sep 27, 2026
55c08da
virtio-blk: back off between failed setup rounds
eKisNonos Sep 27, 2026
c95ab26
linux/wayland: read wl_shm.create_pool as the wire carries it
eKisNonos Sep 27, 2026
5d801d6
linux_guests: window, a Linux program that opens a Wayland window
eKisNonos Sep 27, 2026
3597cef
wip: xsave and the state probe
eKisNonos Sep 27, 2026
acbdcff
wip: foreign guest context and signal answers
eKisNonos Sep 27, 2026
3208394
linux proofs: compile again
eKisNonos Sep 27, 2026
56aa24a
linux/install: keep links, long names and every typeflag from a package
eKisNonos Sep 27, 2026
e955945
linux: prctl, sched_getaffinity, mremap, membarrier, getcpu; clone3 r…
eKisNonos Sep 27, 2026
33de7d9
linux: links, renames, owners, times and nodes for a faithful install
eKisNonos Sep 27, 2026
ea3096f
linux/install: a closure bound large enough for a tool group
eKisNonos Sep 27, 2026
afe3d90
capsule_linux: refuse ptrace, mount, chroot, unshare, capget, io_urin…
eKisNonos Sep 27, 2026
d5db006
cpu: detect features before turning on SSE and XSAVE
eKisNonos Sep 27, 2026
6b7c540
zstd: a decoder for RFC 8878, with vectors from the reference encoder
eKisNonos Sep 27, 2026
50a7d8a
openpgp: verify detached v4 signatures against a pinned keyring
eKisNonos Sep 27, 2026
867e704
process: keep the FPU area off every kernel stack
eKisNonos Sep 27, 2026
1b3b5d7
heap: align the data a caller gets, not the block before its header
eKisNonos Sep 27, 2026
454e098
linux/install: pacman, from a signed database to verified files
eKisNonos Sep 27, 2026
a291bad
xz: a decoder for the .xz format and LZMA2, with vectors from xz itself
eKisNonos Sep 27, 2026
6376106
linux/install: read xz packages too
eKisNonos Sep 27, 2026
adef62f
openpgp: read ASCII armor, as Debian publishes keys and Release.gpg
eKisNonos Sep 27, 2026
7c48300
process: a new thread starts with every FPU register cleared
eKisNonos Sep 27, 2026
7cfa6f7
linux/install: share signatures, decompression and hex beyond pacman
eKisNonos Sep 27, 2026
78affdc
linux/install: Debian, from a signed Release to verified .debs
eKisNonos Sep 27, 2026
27ccfb5
kernel: build without SSE, so no kernel code touches a thread's vectors
eKisNonos Sep 27, 2026
4de4cd6
kernel: no vector registers in its C or its BLAKE3 either
eKisNonos Sep 27, 2026
015e595
init: say what the market answered before refusing an install
eKisNonos Sep 27, 2026
062df09
linux: write down the socket model item 9 is built to
eKisNonos Sep 27, 2026
78043ec
market: one release lookup for readiness and the release itself
eKisNonos Sep 27, 2026
e20c09d
store: place the measurement below the gates, where they end
eKisNonos Sep 27, 2026
2c58578
linux: sign the install and run roles' endpoints into the manifest
eKisNonos Sep 27, 2026
56e4461
linux install: a status the system reports, with the reason it stopped
eKisNonos Sep 27, 2026
9f71ad2
store: follow an install to the end, and say why when it stops
eKisNonos Sep 27, 2026
3114992
store: show which version a listing installs, and from where
eKisNonos Sep 27, 2026
d7b908b
terminal: a prompt that reads, a window with room, help you can scan
eKisNonos Sep 27, 2026
25173c0
linux: record why no pacman or Debian key is pinned yet
eKisNonos Sep 27, 2026
a133866
store, terminal: fix what the live-session screenshots showed
eKisNonos Sep 27, 2026
5717a3a
tools: a mirror relay that keeps a guest's fetches on this machine's …
eKisNonos Sep 27, 2026
86fb860
linux/install: pin Kali's 2025 archive key as the Debian anchor
eKisNonos Sep 27, 2026
3278006
linux/install: reach a mirror on the local network directly
eKisNonos Sep 27, 2026
0cf67e7
kernel: name the page tables and the demand fill behind a user fault
eKisNonos Sep 27, 2026
9d00dd7
linux: a tree per distribution, and listings that say which
eKisNonos Sep 27, 2026
de9d845
linux/install: room for a distribution's index, held once
eKisNonos Sep 27, 2026
75fad0b
linux/install: say which step of a mirror fetch stopped
eKisNonos Sep 27, 2026
36ef297
tools/market-catalogue: list Kali packages through the chain the devi…
eKisNonos Sep 27, 2026
e8ece0f
terminal: drop the tool entry the install builtin shadows
eKisNonos Sep 27, 2026
974f748
linux/install: the install role holds Network, and only it
eKisNonos Sep 27, 2026
0223d41
store: a Linux card names its distribution
eKisNonos Sep 27, 2026
b8a0cf4
security: remove the guard allocator that unmapped by physical address
eKisNonos Sep 27, 2026
3eef46d
linux/net: send the connect-by-host length as net.sockets reads it
eKisNonos Sep 27, 2026
8ad665d
linux/install: a reply ends at its Content-Length, not at an empty read
eKisNonos Sep 27, 2026
ad065b6
inflate, linux/install: a gzip bound the caller sets, sized for real …
eKisNonos Sep 27, 2026
e018c62
linux: resolve a program's interpreter through the guest's links
eKisNonos Sep 27, 2026
8108315
store: drop the distribution from listing labels
eKisNonos Sep 27, 2026
64fe4a7
linux: a guest starts knowing where its display is
eKisNonos Sep 27, 2026
eb623ae
linux: deliver a caught signal and return from its handler
eKisNonos Sep 27, 2026
871a161
linux: reserve a PROT_NONE mapping lazily, so a runtime's arena is cheap
eKisNonos Sep 28, 2026
76b7b73
linux-guests: static Go binaries, and drop movies from the test store
eKisNonos Sep 28, 2026
8ac32d5
vfs: the packed store may hold 128 files, not 64
eKisNonos Sep 28, 2026
b577f8e
mk: keep the desktop demo capsules out of the Linux-guest test store
eKisNonos Sep 28, 2026
1910df8
linux: lift the mapping window above the stack for a large reservation
eKisNonos Sep 28, 2026
bf9d9db
mk: build the Linux-guest test image without first-boot setup
eKisNonos Sep 28, 2026
5ab0a09
exit: keep a thread group's page tables until its last member is gone
eKisNonos Sep 28, 2026
3fc1ac1
foreign: start a guest's clone child on its parent's registers
eKisNonos Sep 28, 2026
874f3ec
kill: let a foreign supervisor end the guests it hosts
eKisNonos Sep 28, 2026
2892723
linux: delete the unused clone copy under call/
eKisNonos Sep 28, 2026
ce395f7
mm: log a demand fill only after one is made
eKisNonos Sep 28, 2026
ffc1b54
foreign: fork on the calling thread's registers and thread pointer
eKisNonos Sep 28, 2026
2311afc
foreign: report a guest thread's fatal fault to its supervisor
eKisNonos Sep 28, 2026
959b57f
linux: end the process when a guest thread dies on a signal
eKisNonos Sep 28, 2026
1e6b8a6
linux: commit a reserved span when mprotect asks for access
eKisNonos Sep 28, 2026
addec49
linux: write the new tid where clone is asked to
eKisNonos Sep 28, 2026
10947aa
linux: end a thread at its exit, and wake its joiner
eKisNonos Sep 28, 2026
db772ac
linux: a pthreads guest, to prove musl threads create, lock and join
eKisNonos Sep 28, 2026
69f3b48
linux: give a pipe Linux's ends: end of file, broken pipe, hang-up
eKisNonos Sep 28, 2026
3e48edb
linux: keep O_NONBLOCK per descriptor, and honour it on a pipe
eKisNonos Sep 28, 2026
bfb0789
linux: serve eventfd
eKisNonos Sep 28, 2026
06a266a
linux: let epoll_wait, an eventfd and a full pipe wait, as Linux's do
eKisNonos Sep 28, 2026
32d2a1a
linux: report edge-triggered and one-shot epoll entries as Linux does
eKisNonos Sep 28, 2026
aa0087d
linux: end a futex wait at its timeout, and serve bitset and requeue
eKisNonos Sep 28, 2026
b1ead15
linux: two guests to prove waiting: gopoll and cwait
eKisNonos Sep 28, 2026
b716a34
linux: let any number of threads wait to read one pipe
eKisNonos Sep 28, 2026
439ed66
linux: let poll, ppoll, select and pselect6 wait for their timeout
eKisNonos Sep 28, 2026
7c3967f
linux: cwait waits with two pipe readers and with poll, ppoll and select
eKisNonos Sep 28, 2026
85b3d77
linux: a closed descriptor leaves epoll, and dup2 closes what it repl…
eKisNonos Sep 28, 2026
468f5aa
linux: cwait checks that a closed descriptor leaves epoll
eKisNonos Sep 28, 2026
b9efc7f
linux: give timerfd Linux's semantics, and keep it with the family
eKisNonos Sep 28, 2026
2f0db3b
linux: cwait checks timerfd one-shot, periodic and absolute
eKisNonos Sep 28, 2026
84e10f5
linux: a guest that needs a signal to reach a running thread: gopreempt
eKisNonos Sep 28, 2026
262c062
linux: serve the descriptor ioctls: FIONREAD, FIONBIO, FIOCLEX, FIONCLEX
eKisNonos Sep 28, 2026
8f77807
linux: carry an epoll interest list through dup and fork
eKisNonos Sep 28, 2026
a045bec
linux: cwait checks the descriptor ioctls and an epoll list through fork
eKisNonos Sep 28, 2026
ff778c7
linux: serve the scheduler calls, epoll_create and epoll_pwait2
eKisNonos Sep 28, 2026
66b55fa
linux: cwait checks the scheduler calls and the other epoll forms
eKisNonos Sep 28, 2026
9039b89
linux: map tgkill's thread group and thread into the family's pids
eKisNonos Sep 28, 2026
afd96ef
linux: cwait checks tgkill with the numbers getpid and gettid give
eKisNonos Sep 28, 2026
24cafe1
linux: cwait runs every part and names each one that fails
eKisNonos Sep 28, 2026
82a487a
foreign: stop a running guest thread at a tick when its supervisor asks
eKisNonos Sep 28, 2026
bada7b7
linux: deliver a caught signal to a thread running its own code
eKisNonos Sep 28, 2026
cee3aed
linux: a C guest that needs a signal to reach a running thread: cpreempt
eKisNonos Sep 28, 2026
fecaf5c
linux: put a signal frame's registers where Linux's ucontext has them
eKisNonos Sep 28, 2026
8a41183
linux: keep each thread's alternate signal stack and enter SA_ONSTACK…
eKisNonos Sep 28, 2026
c0f685d
linux: cwait proves the alternate signal stack
eKisNonos Sep 28, 2026
66aabbc
foreign: a call drops the stop mark its answer already covers
eKisNonos Sep 28, 2026
9481d8c
linux: clone writes the guest's own tid where the caller asked
eKisNonos Sep 28, 2026
b8985e0
linux: cwait sends pthread_kill to another thread
eKisNonos Sep 28, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/ci-iso.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ jobs:

# Build the flashable image. This drives, in order: build and sign every
# capsule, enroll the whole set under one STARK policy root and emit each
# NZKSTRK1 trailer, build and dual-sign the kernel, enroll the kernel and
# NZKSTRK2 trailer, build and dual-sign the kernel, enroll the kernel and
# embed its STARK self-attestation trailer, build the bootloader with the
# stark-kernel-attest check and the enrolled kernel root, and package the
# GPT/FAT32 image.
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,18 @@ jobs:
run: python3 scripts/check_service_caps.py
- name: Attestation parameters live in one place
run: python3 scripts/check_attest_params.py
- name: Every assumption the security rests on is registered
run: python3 tools/nonos-assumptions
- name: No new control that exists and does not run
run: python3 scripts/check_unenforced.py && python3 scripts/check_unenforced.py --self-test
- name: Linux syscall coverage does not fall
run: python3 tools/nonos-linux-coverage --baseline scripts/baselines/linux-syscalls.txt
- name: Wayland coverage does not fall
run: python3 tools/nonos-wayland-coverage --baseline scripts/baselines/wayland-globals.txt
- name: Every served Linux call says what it discloses
run: python3 tools/ratchets/disclosure.py
- name: Every mutant still removes the control it names
run: python3 tools/nonos-mutant --check

# The committed verification/evidence/EVIDENCE.json is a machine-readable inventory of
# everything NONOS proves. Regenerate it from the source tree and fail if it
Expand Down Expand Up @@ -343,6 +355,8 @@ jobs:
- audio_proto_proofs
- capsule_crypto_proofs
- aes_proofs
- capsule_linux_proofs
- market_proofs
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v4.2.2
with:
Expand Down
Binary file added .keys/app_store_publisher_ed25519.pub
Binary file not shown.
Binary file added .keys/app_store_publisher_mldsa65.pub
Binary file not shown.
2 changes: 2 additions & 0 deletions .keys/marketplace_operator_ed25519.pub
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
)_„É|b<C‹Ê=Á€˜Ÿ
;¡úâT­êŽc
10 changes: 6 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ nonos-capsule-video-player = []
nonos-capsule-about = []
nonos-capsule-install = []
nonos-capsule-install-cli = []
nonos-capsule-app-store = []
nonos-capsule-audio-player = []
nonos-capsule-hello = []
nonos-capsule-boot-splash = []
Expand Down Expand Up @@ -556,6 +557,8 @@ microkernel-desktop-base = [
"nonos-capsule-about",
"nonos-capsule-install",
"nonos-capsule-install-cli",
"nonos-capsule-app-store",
"nonos-capsule-market",
"nonos-capsule-linux",
"nonos-capsule-audio",
"nonos-capsule-driver-hda",
Expand Down Expand Up @@ -873,7 +876,9 @@ x25519-dalek = { version = "2", default-features = false, features = ["s
sha3 = { version = "0.10", default-features = false, optional = true }

# Hashing.
blake3 = { version = "1.0", default-features = false }
# Portable only: the SSE and AVX assembly would use vector registers in the
# kernel, which runs before a thread's are saved.
blake3 = { version = "1.0", default-features = false, features = ["pure"] }
sha2 = { version = "0.10", default-features = false, features = ["force-soft"] }

# Core utilities used in the kernel tree.
Expand All @@ -886,9 +891,6 @@ smoltcp = { version = "0.11", default-features = false, features = ["alloc", "so
[target.'cfg(target_arch = "x86_64")'.dependencies]
x86_64 = { version = "0.14", default-features = false, features = ["abi_x86_interrupt", "instructions"] }

[target.'cfg(not(target_arch = "x86_64"))'.dependencies]
blake3 = { version = "1.0", default-features = false, features = ["pure"] }

[build-dependencies]
blake3 = { version = "1.5", default-features = false }
cc = "1.1"
Expand Down
5 changes: 5 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,11 @@ doctor:
else echo " MISS rust $(TOOLCHAIN) (rustup toolchain install $(TOOLCHAIN))"; ok=0; fi; \
if [ -n "$(OVMF)" ] && [ -f "$(OVMF)" ]; then echo " ok OVMF $(OVMF)"; \
else echo " MISS OVMF UEFI firmware"; ok=0; fi; \
if ! $(QEMU) -accel help 2>/dev/null | grep -qx "$(QEMU_ACCEL)"; then \
echo " MISS accel $(QEMU_ACCEL) ($(QEMU) does not offer it; set QEMU_ACCEL)"; ok=0; \
elif [ "$(QEMU_ACCEL)" = tcg ]; then \
echo " ok accel tcg (no /dev/kvm or hvf: the CPU is emulated and boots are slow)"; \
else echo " ok accel $(QEMU_ACCEL)"; fi; \
echo; \
if [ $$ok = 1 ]; then echo " This host can build and boot NONOS."; \
else \
Expand Down
60 changes: 58 additions & 2 deletions abi/syscalls.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# Each [desc.TAG] block publishes the gate the kernel applies to that call.
# `caps = [...]` means all of the listed capabilities: a token needs every one.
# `caps_any = [...]` means any one of them is enough. A block carries one field
# or the other, never both. `caps = ["valid_token"]` means any valid token.
# scripts/check_syscall_caps.py compares each block against the kernel's cap
# table and fails on any difference, so a gate here is what the kernel enforces.

version = 3
abi = "nonos-sys-v1"

Expand Down Expand Up @@ -72,6 +79,9 @@ MFSP = 0x5053464D
MFST = 0x5453464D
MFWT = 0x5457464D
MFRP = 0x5052464D
MFCX = 0x5843464D
MFSG = 0x4753464D
MFIN = 0x4E49464D
MPMP = 0x504D504D
MPCP = 0x5043504D
MPPT = 0x5450504D
Expand All @@ -84,6 +94,10 @@ MLSG = 0x47534C4D
MLVF = 0x46564C4D
MAIN = 0x4E49414D
MDRO = 0x4F52444D
MLCG = 0x47434C4D
MLCR = 0x52434C4D
MAPL = 0x4C50414D
MAIS = 0x5349414D
MIRW = 0x5752494D
MIRY = 0x5952494D
MKAR = 0x52414B4D
Expand Down Expand Up @@ -622,6 +636,24 @@ caps = ["ForeignExec"]
args = [{name="pid",type="u32",dir="in"},{name="value",type="u64",dir="in"}]
ret = {type="i64"}

[desc.MFCX]
nr = 0x5843464D
caps = ["ForeignExec"]
args = [{name="pid",type="u32",dir="in"},{name="out",type="u64*",dir="out"}]
ret = {type="i64"}

[desc.MFSG]
nr = 0x4753464D
caps = ["ForeignExec"]
args = [{name="pid",type="u32",dir="in"},{name="regs",type="u64*",dir="in"},{name="kind",type="u64",dir="in"}]
ret = {type="i64"}

[desc.MFIN]
nr = 0x4E49464D
caps = ["ForeignExec"]
args = [{name="pid",type="u32",dir="in"}]
ret = {type="i64"}

[desc.MPMP]
nr = 0x504D504D
caps = ["ForeignExec"]
Expand All @@ -637,7 +669,7 @@ ret = {type="i64"}
[desc.MFTH]
nr = 0x4854464D
caps = ["ForeignExec"]
args = [{name="pid",type="u32",dir="in"},{name="entry",type="u64",dir="in"},{name="rsp",type="u64",dir="in"},{name="tls",type="u64",dir="in"}]
args = [{name="pid",type="u32",dir="in"},{name="entry",type="u64",dir="in"},{name="rsp",type="u64",dir="in"},{name="tls",type="u64",dir="in"},{name="from",type="u32",dir="in"}]
ret = {type="i64"}

[desc.MPTL]
Expand Down Expand Up @@ -679,7 +711,7 @@ ret = {type="i64"}
[desc.MAIN]
nr = 0x4E49414D
caps = ["AppInstall"]
args = [{name="name_ptr",type="u64",dir="in"},{name="name_len",type="u64",dir="in"}]
args = [{name="listing_ptr",type="u64",dir="in"},{name="listing_len",type="u64",dir="in"},{name="release_ptr",type="u64",dir="in"},{name="release_len",type="u64",dir="in"}]
ret = {type="i64"}

[desc.MDRO]
Expand All @@ -688,6 +720,30 @@ caps = ["EnrolDevRoot"]
args = []
ret = {type="i64"}

[desc.MLCG]
nr = 0x47434C4D
caps = ["EnrolDevRoot"]
args = [{name="op",type="u64",dir="in"},{name="token_ptr",type="u8*",dir="out"}]
ret = {type="i64"}

[desc.MLCR]
nr = 0x52434C4D
caps = ["EnrolDevRoot"]
args = [{name="token_ptr",type="u8*",dir="in"}]
ret = {type="i64"}

[desc.MAIS]
nr = 0x5349414D
caps = ["AppInstall"]
args = [{name="listing_ptr",type="u64",dir="in"},{name="listing_len",type="u64",dir="in"}]
ret = {type="i64"}

[desc.MAPL]
nr = 0x4C50414D
caps = ["AppInstall"]
args = [{name="listing_ptr",type="u64",dir="in"},{name="listing_len",type="u64",dir="in"}]
ret = {type="i64"}

[desc.MPPT]
nr = 0x5450504D
caps = ["ForeignExec"]
Expand Down
6 changes: 5 additions & 1 deletion build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,11 @@ fn rerun_on_capsule_binaries() {
/// the whole space uniformly and needs neither.
fn c_target(arch: &str) -> Option<(&'static str, &'static [&'static str])> {
match arch {
"x86_64" => Some(("x86_64-unknown-none-elf", &["-mno-red-zone", "-mcmodel=kernel"][..])),
// No vector registers: kernel code runs before a thread's are saved.
"x86_64" => Some((
"x86_64-unknown-none-elf",
&["-mno-red-zone", "-mcmodel=kernel", "-mno-mmx", "-mno-sse", "-mno-sse2", "-mno-avx"][..],
)),
"aarch64" => Some(("aarch64-unknown-none-elf", &[][..])),
"riscv64" => Some(("riscv64-unknown-none-elf", &[][..])),
_ => None,
Expand Down
46 changes: 43 additions & 3 deletions mk/10-qemu.mk
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,47 @@ endif

QEMU_MEM := 2G
QEMU_CPU := max
# The accelerator follows the host, by the rule scripts/bootmatrix/qemu.py
# already uses: KVM when /dev/kvm opens read-write, hvf on macOS, TCG
# otherwise. TCG emulates the processor, so `-cpu host` names nothing there and
# it gets `max`, which carries RDRAND. Set QEMU_ACCEL to override.
ifeq ($(shell [ -r /dev/kvm ] && [ -w /dev/kvm ] && echo y),y)
QEMU_ACCEL_AUTO := kvm
else ifeq ($(UNAME_S),Darwin)
QEMU_ACCEL_AUTO := hvf
else
QEMU_ACCEL_AUTO := tcg
endif
QEMU_ACCEL ?= $(QEMU_ACCEL_AUTO)
ifeq ($(QEMU_ACCEL),tcg)
QEMU_ACCEL_ARGS := -accel tcg -cpu $(QEMU_CPU)
else
QEMU_ACCEL_ARGS := -accel $(QEMU_ACCEL) -cpu host,+rdrand,+rdseed
endif
QEMU_SMP ?= 4
QEMU_HOST_SSH_PORT ?= 2222
QEMU_HOST_HTTP_PORT ?= 8080
QEMU_NET_MODE ?= nat
QEMU_NET_CAPTURE ?=
# Every networked run is captured, so what a boot sent is on disk rather than
# inferred from the code; tools/nonos-pcap-egress summarises it. Set it empty
# to run without one.
QEMU_NET_CAPTURE ?= $(TARGET_DIR)/qemu-net.pcap
QEMU_SERIAL_LOG ?= $(TARGET_DIR)/qemu-serial.log
QEMU_SMP_SERIAL_LOG ?= $(TARGET_DIR)/qemu-smp-serial.log
QEMU_IOMMU_SERIAL_LOG ?= $(TARGET_DIR)/qemu-iommu-serial.log
# Options for the intel-iommu device the IOMMU lane adds; a knob like the
# others so the lane can be driven from the command line.
QEMU_IOMMU_OPTS ?= intremap=on,caching-mode=on
# A virtio device uses the vIOMMU only with iommu_platform=on, and only then is
# VIRTIO_F_ACCESS_PLATFORM offered. Without it the device addresses memory
# physically and the lane tests nothing about it. disable-legacy=on because a
# legacy driver cannot take bit 33: it fails to bind instead of bypassing.
QEMU_IOMMU_VIRTIO ?= iommu_platform=on,disable-legacy=on
_iv := $(_boot_comma)$(QEMU_IOMMU_VIRTIO)$(_boot_comma)
iommu_virtio = $(foreach d,virtio-blk-pci virtio-net-pci virtio-rng-pci virtio-vga virtio-vga-gl,\
$(eval _iommu_args := $(patsubst $(d),$(d)$(_boot_comma)$(QEMU_IOMMU_VIRTIO),\
$(subst $(d)$(_boot_comma),$(d)$(_iv),$(_iommu_args)))))$(_iommu_args)
iommu_virtio_args = $(eval _iommu_args := $(subst virtio-vga$(_boot_comma)disable-modern=on,virtio-vga,$(1)))$(call iommu_virtio)
QEMU_BLK_IMG := $(TARGET_DIR)/qemu-virtio-blk.img
QEMU_OVMF_VARS_RW := $(TARGET_DIR)/qemu-OVMF_VARS.fd
QEMU_BLK := -drive "file=$(QEMU_BLK_IMG),if=none,id=vd0,format=raw" -device virtio-blk-pci,drive=vd0
Expand Down Expand Up @@ -84,19 +114,29 @@ QEMU_YRES ?= 1080
# QEMU_GL=1 swaps the display device for virtio-vga-gl (modern transport,
# virglrenderer backend) so the guest can negotiate the 3D command set; the
# cocoa display then needs a GL context. Default stays the plain 2D device.
# cocoa exists only on macOS; elsewhere the window is gtk.
ifeq ($(UNAME_S),Darwin)
QEMU_UI := cocoa
else
QEMU_UI := gtk
endif
ifeq ($(QEMU_GL),1)
QEMU_GPU := -device virtio-vga-gl,xres=$(QEMU_XRES),yres=$(QEMU_YRES)
QEMU_DISPLAY := cocoa,gl=es,zoom-to-fit=on
QEMU_DISPLAY ?= $(QEMU_UI),gl=es,zoom-to-fit=on
else
QEMU_GPU := -device virtio-vga,disable-modern=on,vectors=0,edid=on,xres=$(QEMU_XRES),yres=$(QEMU_YRES)
QEMU_DISPLAY := cocoa,zoom-to-fit=on
QEMU_DISPLAY ?= $(QEMU_UI),zoom-to-fit=on
endif
# Keyboard/mouse via the q35 i8042 (PS/2). USB HID interrupt-IN transfers
# are not serviced under macOS hvf, so usb-kbd/usb-mouse never deliver input
# there; the xHCI controller stays for the USB stack/storage paths.
QEMU_USB := -device qemu-xhci,id=xhci
QEMU_RNG := -device virtio-rng-pci
ifeq ($(UNAME_S),Darwin)
QEMU_AUDIODEV ?= coreaudio
else
QEMU_AUDIODEV ?= none
endif
QEMU_AUDIO := -audiodev $(QEMU_AUDIODEV),id=snd0 -device intel-hda -device hda-duplex,audiodev=snd0

# Software TPM 2.0 for measured boot. The guest reaches it by direct MMIO at
Expand Down
Loading
Loading