container/initdaemon: copy wstatus from wait4 loop

Due to the special nature of the init process, direct use of wait outside the wait4 loop is racy. This change copies the wstatus from wait4 loop state instead.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2025-12-08 22:58:42 +09:00
parent dafe9f8efc
commit e9fb1d7be5
5 changed files with 73 additions and 40 deletions

View File

@@ -493,21 +493,6 @@ func (k *kstub) start(c *exec.Cmd) error {
return err
}
func (k *kstub) wait(c *exec.Cmd) error {
k.Helper()
expect := k.Expects("wait")
err := expect.Error(
stub.CheckArg(k.Stub, "c.Path", c.Path, 0),
stub.CheckArgReflect(k.Stub, "c.Args", c.Args, 1),
stub.CheckArgReflect(k.Stub, "c.Env", c.Env, 2),
stub.CheckArg(k.Stub, "c.Dir", c.Dir, 3))
if mgc, ok := expect.Ret.(uintptr); ok && mgc == stub.PanicExit {
panic(stub.PanicExit)
}
return err
}
func (k *kstub) signal(c *exec.Cmd, sig os.Signal) error {
k.Helper()
expect := k.Expects("signal")