aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/sandbox/init.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-03-17 02:31:46 +0900
committerOphestra <cat@gensokyo.uk>2025-03-17 02:44:07 +0900
commit9a1f8e129fe0f9919981b8a1d345a9b455bd76de (patch)
treee52f33a3908c256aebb30f059cabd40f371a886f /internal/sandbox/init.go
parentee108603572101ad3c285830e04ee248916b6c5d (diff)
sandbox: wrap fmsg interface
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/sandbox/init.go')
-rw-r--r--internal/sandbox/init.go50
1 files changed, 27 insertions, 23 deletions
diff --git a/internal/sandbox/init.go b/internal/sandbox/init.go
index 85fcb13c..058fe9a2 100644
--- a/internal/sandbox/init.go
+++ b/internal/sandbox/init.go
@@ -14,8 +14,6 @@ import (
"time"
"git.gensokyo.uk/security/fortify/helper/proc"
- "git.gensokyo.uk/security/fortify/internal"
- "git.gensokyo.uk/security/fortify/internal/fmsg"
"git.gensokyo.uk/security/fortify/seccomp"
)
@@ -40,9 +38,9 @@ type initParams struct {
Verbose bool
}
-func Init(exit func(code int)) {
+func Init(prepare func(prefix string), setVerbose func(verbose bool)) {
runtime.LockOSThread()
- fmsg.Prepare("init")
+ prepare("init")
if os.Getpid() != 1 {
log.Fatal("this process must run as pid 1")
@@ -72,14 +70,14 @@ func Init(exit func(code int)) {
log.Fatal("invalid setup parameters")
}
- internal.InstallFmsg(params.Verbose)
- fmsg.Verbose("received setup parameters")
+ setVerbose(params.Verbose)
+ msg.Verbose("received setup parameters")
closeSetup = f
offsetSetup = int(setupFile.Fd() + 1)
}
// write uid/gid map here so parent does not need to set dumpable
- if err := internal.SetDumpable(internal.SUID_DUMP_USER); err != nil {
+ if err := SetDumpable(SUID_DUMP_USER); err != nil {
log.Fatalf("cannot set SUID_DUMP_USER: %s", err)
}
if err := os.WriteFile("/proc/self/uid_map",
@@ -97,7 +95,7 @@ func Init(exit func(code int)) {
0); err != nil {
log.Fatalf("%v", err)
}
- if err := internal.SetDumpable(internal.SUID_DUMP_DISABLE); err != nil {
+ if err := SetDumpable(SUID_DUMP_DISABLE); err != nil {
log.Fatalf("cannot set SUID_DUMP_DISABLE: %s", err)
}
@@ -146,11 +144,12 @@ func Init(exit func(code int)) {
}
for i, op := range *params.Ops {
- fmsg.Verbosef("mounting %s", op)
+ msg.Verbosef("mounting %s", op)
if err := op.apply(&params.InitParams); err != nil {
- fmsg.PrintBaseError(err,
+ msg.PrintBaseErr(err,
fmt.Sprintf("cannot apply op %d:", i))
- exit(1)
+ msg.BeforeExit()
+ os.Exit(1)
}
}
@@ -169,7 +168,7 @@ func Init(exit func(code int)) {
{
var fd int
- if err := internal.IgnoringEINTR(func() (err error) {
+ if err := IgnoringEINTR(func() (err error) {
fd, err = syscall.Open("/", syscall.O_DIRECTORY|syscall.O_RDONLY, 0)
return
}); err != nil {
@@ -234,7 +233,7 @@ func Init(exit func(code int)) {
if err := cmd.Start(); err != nil {
log.Fatalf("%v", err)
}
- fmsg.Suspend()
+ msg.Suspend()
/*
close setup pipe
@@ -295,16 +294,17 @@ func Init(exit func(code int)) {
for {
select {
case s := <-sig:
- if fmsg.Resume() {
- fmsg.Verbosef("terminating on %s after process start", s.String())
+ if msg.Resume() {
+ msg.Verbosef("terminating on %s after process start", s.String())
} else {
- fmsg.Verbosef("terminating on %s", s.String())
+ msg.Verbosef("terminating on %s", s.String())
}
- exit(0)
+ msg.BeforeExit()
+ os.Exit(0)
case w := <-info:
if w.wpid == cmd.Process.Pid {
// initial process exited, output is most likely available again
- fmsg.Resume()
+ msg.Resume()
switch {
case w.wstatus.Exited():
@@ -321,18 +321,22 @@ func Init(exit func(code int)) {
}()
}
case <-done:
- exit(r)
+ msg.BeforeExit()
+ os.Exit(r)
case <-timeout:
log.Println("timeout exceeded waiting for lingering processes")
- exit(r)
+ msg.BeforeExit()
+ os.Exit(r)
}
}
}
// TryArgv0 calls [Init] if the last element of argv0 is "init".
-func TryArgv0() {
+func TryArgv0(v Msg, prepare func(prefix string), setVerbose func(verbose bool)) {
if len(os.Args) > 0 && path.Base(os.Args[0]) == "init" {
- Init(internal.Exit)
- internal.Exit(0)
+ msg = v
+ Init(prepare, setVerbose)
+ msg.BeforeExit()
+ os.Exit(0)
}
}