go-sandbox/runner/ptrace/run_linux.go
2021-06-05 16:16:05 -07:00

41 lines
755 B
Go

package ptrace
import (
"context"
"os"
"github.com/criyle/go-sandbox/pkg/forkexec"
"github.com/criyle/go-sandbox/ptracer"
"github.com/criyle/go-sandbox/runner"
)
// Run starts the tracing process
func (r *Runner) Run(c context.Context) runner.Result {
ch := &forkexec.Runner{
Args: r.Args,
Env: r.Env,
ExecFile: r.ExecFile,
RLimits: r.RLimits,
Files: r.Files,
WorkDir: r.WorkDir,
Seccomp: r.Seccomp.SockFprog(),
Ptrace: true,
SyncFunc: r.SyncFunc,
UnshareCgroupAfterSync: os.Getuid() == 0,
}
th := &tracerHandler{
ShowDetails: r.ShowDetails,
Unsafe: r.Unsafe,
Handler: r.Handler,
}
tracer := ptracer.Tracer{
Handler: th,
Runner: ch,
Limit: r.Limit,
}
return tracer.Trace(c)
}