aboutsummaryrefslogtreecommitdiff
path: root/tests/nixos
diff options
context:
space:
mode:
authorAlois Wohlschlager <alois1@gmx-topmail.de>2024-07-01 09:18:01 +0200
committerAlois Wohlschlager <alois1@gmx-topmail.de>2024-07-25 18:24:45 +0200
commite7188e211a5a2ac0ba34635a846569560bb5f000 (patch)
tree4d42560d44069fb8a4ecc43d983d0c5956302832 /tests/nixos
parent127ee1a101e3f5ebab39ad98cbe58fefcd52eca5 (diff)
libstore/build: block io_uring
Unfortunately, io_uring is totally opaque to seccomp, and while currently there are no dangerous operations implemented, there is no guarantee that it remains this way. This means that io_uring should be blocked entirely to ensure that the sandbox is future-proof. This has not been observed to cause issues in practice. Change-Id: I45d3895f95abe1bc103a63969f444c334dbbf50d
Diffstat (limited to 'tests/nixos')
-rw-r--r--tests/nixos/default.nix2
-rw-r--r--tests/nixos/io_uring/default.nix7
-rw-r--r--tests/nixos/io_uring/package.nix19
3 files changed, 28 insertions, 0 deletions
diff --git a/tests/nixos/default.nix b/tests/nixos/default.nix
index 301eede46..20e66f6c1 100644
--- a/tests/nixos/default.nix
+++ b/tests/nixos/default.nix
@@ -155,4 +155,6 @@ in
broken-userns = runNixOSTestFor "x86_64-linux" ./broken-userns.nix;
coredumps = runNixOSTestFor "x86_64-linux" ./coredumps;
+
+ io_uring = runNixOSTestFor "x86_64-linux" ./io_uring;
}
diff --git a/tests/nixos/io_uring/default.nix b/tests/nixos/io_uring/default.nix
new file mode 100644
index 000000000..9cd445d6a
--- /dev/null
+++ b/tests/nixos/io_uring/default.nix
@@ -0,0 +1,7 @@
+let
+ inherit (import ../util.nix) mkNixBuildTest;
+in
+mkNixBuildTest {
+ name = "io_uring";
+ expressionFile = ./package.nix;
+}
diff --git a/tests/nixos/io_uring/package.nix b/tests/nixos/io_uring/package.nix
new file mode 100644
index 000000000..8f980183a
--- /dev/null
+++ b/tests/nixos/io_uring/package.nix
@@ -0,0 +1,19 @@
+{ runCommandCC }:
+runCommandCC "io_uring-is-blocked" { } ''
+ cat > test.c <<EOF
+ #include <errno.h>
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
+ int main() {
+ int res = syscall(SYS_io_uring_setup, 0, NULL);
+ return res == -1 && errno == ENOSYS ? 0 : 1;
+ }
+ EOF
+ "$CC" -o test test.c
+ if ! ./test; then
+ echo "Oh no! io_uring is available!"
+ exit 1
+ fi
+ touch "$out"
+''