Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
e7cb324
service: report time namespace support unconditionally
dangowrt Aug 21, 2026
d9d0b36
jail: tolerate exact-duplicate mount registrations
dangowrt Jun 17, 2026
4c0f70e
jail: do not catch synchronous fault signals in signals_init
dangowrt Jun 17, 2026
5673471
jail: fix free_hooklist/free_sysctl iteration over arrays of pointers
dangowrt Jun 17, 2026
3e956d5
jail/capabilities: treat a missing OCI capability set as empty, not a…
dangowrt Jun 17, 2026
33f270f
jail: retry pipe sync reads interrupted by a signal
dangowrt Jun 17, 2026
014c684
jail: parse and apply further OCI process and linux fields
dangowrt Jun 17, 2026
914d92f
jail: run OCI prestart, createRuntime and poststart hooks
dangowrt Jun 17, 2026
813d4e1
jail: create the container time namespace and apply linux.timeOffsets
dangowrt Jun 17, 2026
20f75c5
jail/cgroups: support further cgroup v2 cpu and memory controls
dangowrt Jun 18, 2026
a454498
jail/cgroups: cap container memory at a percentage of system RAM
dangowrt Jun 18, 2026
d3db457
jail: report cgroup memory and pids statistics and add memory.reclaim
dangowrt Jun 17, 2026
9cd74e3
uxc: restructure argv parser into global/verb/verb-flag phases
dangowrt Jun 17, 2026
f8a01ec
jail: pause and resume via cgroup.freeze and kill all members
dangowrt Aug 21, 2026
030a758
uxc: add pause and resume verbs and kill --all
dangowrt Aug 21, 2026
f4d512d
jail: place container init and exec into the target cgroup via clone3
dangowrt Jun 17, 2026
9e25bb0
jail: honour the mdwe annotation via PR_SET_MDWE
dangowrt Jun 17, 2026
b15ef29
jail: integrate the Landlock LSM via OCI annotations
dangowrt Jun 17, 2026
136ec80
jail, uxc: run rootless containers via idmapped mounts under a user n…
dangowrt Jun 17, 2026
61dcc56
jail: hand the console PTY master over a console socket
dangowrt Aug 21, 2026
d4c6ebf
uxc: pass --console-socket on create and rework attach cleanup
dangowrt Aug 21, 2026
251a30c
jail: add exec and update ubus methods and systemd-cgroup translation
dangowrt Aug 21, 2026
33d4b5e
uxc: restructure the CLI into a runc-style dispatcher
dangowrt Aug 21, 2026
2c6b945
uxc: add exec and update verbs
dangowrt Aug 21, 2026
7519638
jail/seccomp: add RISC-V, MIPS-by-ABI and PPC64 architecture support
dangowrt Jun 17, 2026
6d12f64
jail/seccomp-oci: support further OCI seccomp actions, flags and larg…
dangowrt Jun 17, 2026
f15d0c4
jail: apply OCI seccomp filters via ptrace syscall injection
dangowrt Jun 17, 2026
ef2d5fc
jail: add seccomp trace, audit and complain modes
dangowrt Aug 21, 2026
655d995
uxc: add trace, audit and complain verbs
dangowrt Aug 21, 2026
9f32e85
build: add the trace2seccomp profile generator, drop the utrace target
dangowrt Jun 17, 2026
86cf36d
jail: harden container mount/device setup and add -V volume binds
dangowrt Jun 17, 2026
24495d9
jail: provide resolv.conf to containers with a private netifd
dangowrt Jun 17, 2026
7948666
uxc-net: declarative container networking helper
dangowrt Jun 17, 2026
b1407e7
jail: wire container network-namespace setup to uxc-net
dangowrt Jun 17, 2026
d1fe47f
uxc: provision and reap per-container volumes
dangowrt Jun 17, 2026
a833906
jail: append per-deployment environment from a file via -x
dangowrt Aug 21, 2026
9cd4a85
uxc: materialise initenv into per-container state and generate secrets
dangowrt Aug 21, 2026
0d1c1d4
jail: provision per-instance files via idmapped credential binds
dangowrt Aug 21, 2026
6caa397
uxc: render provision entries and the stack hosts file into data binds
dangowrt Aug 21, 2026
5287d3b
jail: emit container lifecycle events
dangowrt Aug 21, 2026
bfbf9d4
uxc: synchronise create, start, kill and delete on lifecycle events
dangowrt Aug 21, 2026
0744a2b
uxc: package-aware delete and orphan-state reconciliation
dangowrt Jun 17, 2026
42a8d33
uxc-stack: add the container stack engine
dangowrt Jun 17, 2026
ac06cb1
jail: give each stack member a unique cgroup leaf
dangowrt Jun 17, 2026
e31ce1e
jail, uxc: declare OCI runtime-spec 1.3.0 support
dangowrt Jun 17, 2026
0f72b59
uxc: look up settings by container name
dangowrt Aug 18, 2026
7419d65
service, jail: accept the caller's stdio for containers
dangowrt Aug 21, 2026
a0a8983
uxc: hand the caller's stdio to containers
dangowrt Aug 21, 2026
9a1abfc
jail: log through ulog instead of the container's stdio
dangowrt Aug 18, 2026
53266e8
jail: pass the container state to hooks on stdin
dangowrt Aug 18, 2026
89af683
jail: write the pid file without a trailing newline
dangowrt Aug 18, 2026
c2becde
jail: mount in the order the configuration lists
dangowrt Aug 18, 2026
dce9f3a
jail: fail when a namespace cannot be joined
dangowrt Aug 19, 2026
3039317
jail, uxc: report the exit status and signal the invoker
dangowrt Aug 21, 2026
6aa23a8
jail: give the container's namespaces to its own user namespace
dangowrt Aug 21, 2026
0b99742
jail: move time namespace setup into the child
dangowrt Aug 21, 2026
3f4ff94
uxc-stack: pass the addressing annotations through to members
dangowrt Aug 21, 2026
7130a8e
jail: mount odhcp6c into the netifd helper jail
dangowrt Aug 21, 2026
0c15c7a
jail: report the container's network namespace and addresses in its s…
dangowrt Aug 21, 2026
17a6650
uxc-net: honour org.openwrt.network.proto for the in-jail interface
dangowrt Aug 21, 2026
ef6d6e6
uxc-net: add IPv6 addressing and a deterministic interface identifier
dangowrt Aug 21, 2026
85dce23
uxc-net: make routed containers a delegated-prefix downstream
dangowrt Aug 21, 2026
66781b2
uxc-net: remove the host configuration it creates
dangowrt Aug 21, 2026
9f0f087
jail: fail the container when uxc-net cannot configure its network
dangowrt Aug 21, 2026
db18723
uxc: show container addresses and the host network namespace in list
dangowrt Aug 21, 2026
7c05dc6
uxc: accept --format json and --quiet like runc
dangowrt Aug 21, 2026
1091a16
jail: report the container's creation time and rootfs in its state
dangowrt Aug 21, 2026
1ee8da3
uxc: show the creation time and rootfs the runtime reports
dangowrt Aug 21, 2026
d22739f
uxc: purge orphaned state without forking rm
dangowrt Aug 22, 2026
7a7f90c
uxc: fail when the image volume cannot be activated
dangowrt Aug 22, 2026
3f85611
uxc: drive uvol over ubus where the plugin is present
dangowrt Aug 22, 2026
94688b4
service: expose container data through get_data and set_data
dangowrt Aug 22, 2026
5f3bd0b
uxc-net: publish the host configuration instead of writing UCI
dangowrt Aug 22, 2026
7106136
uxc: refuse volume names outside a safe character set
dangowrt Aug 23, 2026
8b66962
uxc-net: publish host network as procd service data instead of drivin…
dangowrt Sep 1, 2026
0aa2fc2
jail: point the /dev/ptmx symlink at the relative pts/ptmx
dangowrt Sep 2, 2026
4a6b6ea
jail: apply OCI seccomp without forcing no-new-privs
dangowrt Sep 2, 2026
7e164b2
jail: honour linux.rootfsPropagation on the container root
dangowrt Sep 2, 2026
e32d25a
jail: reject start of a container without a process
dangowrt Sep 2, 2026
237ae2b
jail: restart the container when netifd reappears
dangowrt Sep 2, 2026
f3df40f
uxc: let delete finish when the container is already gone
dangowrt Sep 2, 2026
6d44d6b
uxc-net: attach containers to multiple bridge VLANs
dangowrt Sep 2, 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
34 changes: 14 additions & 20 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,44 +101,38 @@ ADD_CUSTOM_TARGET(capabilities-names-h DEPENDS capabilities-names.h)

IF(SECCOMP_SUPPORT)
ADD_DEFINITIONS(-DSECCOMP_SUPPORT)
ADD_LIBRARY(preload-seccomp SHARED jail/preload.c jail/seccomp.c jail/seccomp-oci.c)
TARGET_LINK_LIBRARIES(preload-seccomp dl ${ubox} ${blobmsg_json})
INSTALL(TARGETS preload-seccomp
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
ADD_DEPENDENCIES(preload-seccomp syscall-names-h)
SET(SOURCES_OCI_SECCOMP jail/seccomp-oci.c)
SET(SOURCES_OCI_SECCOMP jail/seccomp-oci.c jail/seccomp-inject.c)
SET(SOURCES_JAIL_TRACE jail/seccomp-trace.c)
ENDIF()

IF(JAIL_SUPPORT)
ADD_EXECUTABLE(ujail jail/jail.c jail/cgroups.c jail/cgroups-bpf.c jail/elf.c jail/fs.c jail/capabilities.c jail/netifd.c ${SOURCES_OCI_SECCOMP})
ADD_EXECUTABLE(ujail jail/jail.c jail/cgroups.c jail/cgroups-bpf.c jail/elf.c jail/fs.c jail/capabilities.c jail/landlock.c jail/netifd.c ${SOURCES_OCI_SECCOMP} ${SOURCES_JAIL_TRACE})
TARGET_LINK_LIBRARIES(ujail ${ubox} ${ubus} ${uci} ${blobmsg_json})
INSTALL(TARGETS ujail
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
)
ADD_DEPENDENCIES(ujail capabilities-names-h)
IF(SECCOMP_SUPPORT)
ADD_DEPENDENCIES(ujail syscall-names-h)
TARGET_LINK_LIBRARIES(ujail ${udebug})
ENDIF()

ADD_EXECUTABLE(uxc uxc.c)
TARGET_LINK_LIBRARIES(uxc ${ubox} ${ubus} ${blobmsg_json})
INSTALL(TARGETS uxc
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
)
INSTALL(PROGRAMS jail/uxc-net
DESTINATION ${CMAKE_INSTALL_SBINDIR}
)
INSTALL(PROGRAMS uxc-stack
DESTINATION ${CMAKE_INSTALL_SBINDIR}
)
INSTALL(FILES uxc-stack.uc
DESTINATION ${CMAKE_INSTALL_DATADIR}/uxc
)
endif()

IF(UTRACE_SUPPORT)
ADD_EXECUTABLE(utrace trace/trace.c)
TARGET_LINK_LIBRARIES(utrace ${ubox} ${json} ${blobmsg_json})
INSTALL(TARGETS utrace
RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}
)
ADD_DEPENDENCIES(utrace syscall-names-h)

ADD_LIBRARY(preload-trace SHARED trace/preload.c)
TARGET_LINK_LIBRARIES(preload-trace dl)
INSTALL(TARGETS preload-trace
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
INSTALL(PROGRAMS trace2seccomp.uc DESTINATION ${CMAKE_INSTALL_SBINDIR} RENAME trace2seccomp)
endif()
2 changes: 2 additions & 0 deletions container.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
#include <stdbool.h>
#include <sys/stat.h>

#define OCI_VERSION_STRING "1.3.0"

#define PROCD_NOAFILE_DIR "/tmp/.ujail"
#define PROCD_NOAFILE PROCD_NOAFILE_DIR "/noafile"

Expand Down
3 changes: 1 addition & 2 deletions jail/capabilities.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,8 @@ static uint64_t parseOCIcap(struct blob_attr *msg)
uint64_t caps = 0;
int capnum;

/* each capset is optional, set all-1 mask if absent */
if (!msg)
return JAIL_CAP_ALL;
return 0;

blobmsg_for_each_attr(cur, msg, rem) {
capnum = find_capabilities(blobmsg_get_string(cur));
Expand Down
Loading
Loading