sandbox: expose cancel behaviour
All checks were successful
Test / Create distribution (push) Successful in 40s
Test / Fpkg (push) Successful in 11m53s
Test / Fortify (push) Successful in 1m57s
Test / Data race detector (push) Successful in 2m33s
Test / Flake checks (push) Successful in 58s

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2025-03-15 03:04:27 +09:00
parent 10a21ce3ef
commit e64e7608ca
2 changed files with 21 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ import (
"path"
"strconv"
"syscall"
"time"
"git.gensokyo.uk/security/fortify/helper/proc"
"git.gensokyo.uk/security/fortify/internal"
@@ -68,6 +69,9 @@ type (
Stdout io.Writer
Stderr io.Writer
Cancel func() error
WaitDelay time.Duration
cmd *exec.Cmd
ctx context.Context
}
@@ -130,6 +134,7 @@ func (p *Container) Start() error {
p.cmd = p.CommandContext(c)
p.cmd.Stdin, p.cmd.Stdout, p.cmd.Stderr = p.Stdin, p.Stdout, p.Stderr
p.cmd.Cancel, p.cmd.WaitDelay = p.Cancel, p.WaitDelay
p.cmd.Dir = "/"
p.cmd.SysProcAttr = &syscall.SysProcAttr{
Setsid: p.Flags&FAllowTTY == 0,
@@ -208,6 +213,11 @@ func (p *Container) Serve() error {
func (p *Container) Wait() error { defer p.cancel(); return p.cmd.Wait() }
func (p *Container) String() string {
return fmt.Sprintf("argv: %q, flags: %#x, seccomp: %#x",
p.Args, p.Flags, int(p.Flags.seccomp(p.Seccomp)))
}
func New(ctx context.Context, name string, args ...string) *Container {
return &Container{name: name, ctx: ctx,
InitParams: InitParams{Args: append([]string{name}, args...), Dir: "/", Ops: new(Ops)},