aboutsummaryrefslogtreecommitdiffhomepage
path: root/container/syscall_range_proc.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-17 14:19:00 +0900
committerOphestra <cat@gensokyo.uk>2026-03-17 14:19:00 +0900
commit0a12d456ce5869042dc06c43c360c43cab942d6b (patch)
treee94bcc00c5f96eb3683155ffec0fc6362b9aeb2e /container/syscall_range_proc.go
parentd1fc1a3db73e61ef85667f835005659dc7c1cb1f (diff)
container: set CLOEXEC via close_range
This is guarded behind the close_range build tag for now. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'container/syscall_range_proc.go')
-rw-r--r--container/syscall_range_proc.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/container/syscall_range_proc.go b/container/syscall_range_proc.go
new file mode 100644
index 00000000..62b369f0
--- /dev/null
+++ b/container/syscall_range_proc.go
@@ -0,0 +1,28 @@
+//go:build !close_range
+
+package container
+
+import (
+ "os"
+ "strconv"
+ "syscall"
+
+ "hakurei.app/container/fhs"
+)
+
+// doCloseOnExec implements ensureCloseOnExec by ranging over proc_pid_fd(5).
+func doCloseOnExec() error {
+ entries, err := os.ReadDir(fhs.ProcSelf + "fd/")
+ if err != nil {
+ return err
+ }
+
+ var fd int
+ for _, ent := range entries {
+ if fd, err = strconv.Atoi(ent.Name()); err != nil {
+ return err // not reached
+ }
+ syscall.CloseOnExec(fd)
+ }
+ return nil
+}