From 09d284498109b847da0da1e2c5f883268a7f2d46 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Thu, 21 Aug 2025 21:59:07 +0900 Subject: container/init: wrap syscall helper functions This allows tests to stub all kernel behaviour, enabling measurement of all function call arguments and error injection. Signed-off-by: Ophestra --- container/autoetc.go | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'container/autoetc.go') diff --git a/container/autoetc.go b/container/autoetc.go index 0334ad14..ee8dfbe4 100644 --- a/container/autoetc.go +++ b/container/autoetc.go @@ -3,8 +3,7 @@ package container import ( "encoding/gob" "fmt" - "os" - "syscall" + "io/fs" ) func init() { gob.Register(new(AutoEtcOp)) } @@ -21,38 +20,35 @@ func (f *Ops) Etc(host *Absolute, prefix string) *Ops { type AutoEtcOp struct{ Prefix string } -func (e *AutoEtcOp) Valid() bool { return e != nil } -func (e *AutoEtcOp) early(*setupState) error { return nil } -func (e *AutoEtcOp) apply(state *setupState) error { +func (e *AutoEtcOp) Valid() bool { return e != nil } +func (e *AutoEtcOp) early(*setupState, syscallDispatcher) error { return nil } +func (e *AutoEtcOp) apply(state *setupState, k syscallDispatcher) error { if state.nonrepeatable&nrAutoEtc != 0 { - return msg.WrapErr(syscall.EINVAL, "autoetc is not repeatable") + return msg.WrapErr(fs.ErrInvalid, "autoetc is not repeatable") } state.nonrepeatable |= nrAutoEtc const target = sysrootPath + FHSEtc rel := e.hostRel() + "/" - if err := os.MkdirAll(target, 0755); err != nil { + if err := k.mkdirAll(target, 0755); err != nil { return wrapErrSelf(err) } - if d, err := os.ReadDir(toSysroot(e.hostPath().String())); err != nil { + if d, err := k.readdir(toSysroot(e.hostPath().String())); err != nil { return wrapErrSelf(err) } else { for _, ent := range d { n := ent.Name() switch n { - case ".host": - - case "passwd": - case "group": + case ".host", "passwd", "group": case "mtab": - if err = os.Symlink(FHSProc+"mounts", target+n); err != nil { + if err = k.symlink(FHSProc+"mounts", target+n); err != nil { return wrapErrSelf(err) } default: - if err = os.Symlink(rel+n, target+n); err != nil { + if err = k.symlink(rel+n, target+n); err != nil { return wrapErrSelf(err) } } -- cgit v1.3.1