proc/priv/init: early init check
All checks were successful
Build / Create distribution (push) Successful in 1m39s
Test / Run NixOS test (push) Successful in 3m45s

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2025-01-18 12:23:07 +09:00
parent 7baca66a56
commit b31d055e20
4 changed files with 30 additions and 15 deletions

View File

@@ -0,0 +1,18 @@
package init0
import (
"os"
"path"
"git.gensokyo.uk/security/fortify/internal/fmsg"
)
// used by the parent process
// TryArgv0 calls [Main] if argv0 indicates the process is started from a file named "init".
func TryArgv0() {
if len(os.Args) > 0 && path.Base(os.Args[0]) == "init" {
Main()
fmsg.Exit(0)
}
}

View File

@@ -5,7 +5,6 @@ import (
"os"
"os/exec"
"os/signal"
"path"
"syscall"
"time"
@@ -38,14 +37,6 @@ func Main() {
panic("unreachable")
}
// re-exec
if len(os.Args) > 0 && (os.Args[0] != "fortify" || os.Args[1] != "init" || len(os.Args) != 2) && path.IsAbs(os.Args[0]) {
if err := syscall.Exec(os.Args[0], []string{"fortify", "init"}, os.Environ()); err != nil {
fmsg.Println("cannot re-exec self:", err)
// continue anyway
}
}
// receive setup payload
var (
payload Payload