| 31 Mar 2025 |
antifuchs | huh, I have a rust program that uses the compio runtime backed by io-uring on linux, failing tests when nix build'ing because the runtime can't be created with this error: cannot create runtime: Os { code: 38, kind: Unsupported, message: "Function not implemented" }. It can be compiled and passes tests when I run cargo test on the commandline. is this a sandbox issue? | 17:01:14 |
K900 | Yes | 17:01:45 |
K900 | The sandbox bans io_uring | 17:01:48 |
K900 | Because there's no good way to actually sandbox the thing | 17:01:56 |
antifuchs | haha, that would do it | 17:01:57 |
antifuchs | guess I'll just disable checks, then | 17:02:36 |
| lassulus joined the room. | 18:45:30 |
| @federicodschonborn:matrix.org joined the room. | 19:54:18 |
@r522:matrix.org | how does the sandbox work, eBPF filter? | 20:30:57 |
niko ⚡️ | seccomp and namespaces | 20:35:24 |
@r522:matrix.org | ah, seems to be namespacing?
i... don't think that breaks under io_uring? | 20:35:28 |
@r522:matrix.org | seccomp would | 20:35:30 |
niko ⚡️ | Nix has an explicit allow-list of syscalls | 20:35:49 |
niko ⚡️ | nothing from io_uring family is on that list | 20:35:59 |
niko ⚡️ | By design | 20:36:02 |
@r522:matrix.org | i'm looking at https://github.com/NixOS/nix/blob/5a8dedc45cc04a207917316c245e4993234bfbe0/src/libstore/unix/build/local-derivation-goal.cc and i don't see an allow list?
... i also don't see where io_uring is blocked though | 20:38:17 |
@r522:matrix.org | * i'm looking at https://github.com/NixOS/nix/blob/5a8dedc45cc04a207917316c245e4993234bfbe0/src/libstore/unix/build/local-derivation-goal.cc#L1774 and i don't see an allow list?
... i also don't see where io_uring is blocked though | 20:39:05 |
@r522:matrix.org | so i guess that's not what sets up the build sandbox | 20:39:17 |
niko ⚡️ | No, you're right, I'm too Lix-brained, Lix has an explicit syscall list, CppNix uses (for the most part) the default seccomp profile | 20:45:13 |
@r522:matrix.org | mhm
i will go look in lix to see where they do it then | 20:46:48 |
@r522:matrix.org | right, yeah, they do | 20:47:22 |
@r522:matrix.org | that being said, they don't seem to care about the exact path used for opens | 20:48:08 |
@r522:matrix.org | so it's seccomp but not in a way that inspects paths
actually, you can't do that anyways | 20:48:35 |
@r522:matrix.org | * so it's seccomp but not in a way that inspects paths
actually, you can't do that anyways with seccomp | 20:48:38 |
@r522:matrix.org | so allowing io_uring operations that are equal to syscalls that are already allowed would be fine | 20:48:57 |
@r522:matrix.org | unsure if you can set global io_uring restrictions though | 20:50:59 |
@r522:matrix.org | mhm yeah it's per-ring | 20:51:42 |
| 1 Apr 2025 |
@aloisw:julia0815.de | In reply to @r522:matrix.org so allowing io_uring operations that are equal to syscalls that are already allowed would be fine The problem is that seccomp cannot do that. | 04:38:41 |
| leona joined the room. | 08:42:50 |
@r522:matrix.org | yeah
it wouldn't be hard to make it do that, kernel-wise (or maybe LD_PRELOAD some shim that goes and asks for an already created ring that has syscall restrictions applied already)
but i guess ultimately it doesn't Particularly matter since all you lose is the ability to run tests in the sandbox | 10:42:38 |