aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-10-29 23:10:12 +0900
committerOphestra <cat@gensokyo.uk>2025-10-29 23:10:12 +0900
commit2563391086b81cc1f68b76fe8e6ce18b9554ff2c (patch)
tree4ea03eccb7893025e64aac23699ba879a3f2e655 /internal
parenta0b4e47acc228e48165966d8e139277b8f6f450e (diff)
internal/outcome/shim: params check early
This is unreachable, but keeping it here as a failsafe until more test cases are added. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal')
-rw-r--r--internal/outcome/shim.go7
-rw-r--r--internal/outcome/shim_test.go42
2 files changed, 25 insertions, 24 deletions
diff --git a/internal/outcome/shim.go b/internal/outcome/shim.go
index 53d04ea2..b07770b4 100644
--- a/internal/outcome/shim.go
+++ b/internal/outcome/shim.go
@@ -147,6 +147,9 @@ func shimEntrypoint(k syscallDispatcher) {
}
}
}
+ if stateParams.params.Ops == nil { // unreachable
+ k.fatal("invalid container params")
+ }
// shim exit outcomes
var cancelContainer atomic.Pointer[context.CancelFunc]
@@ -187,10 +190,6 @@ func shimEntrypoint(k syscallDispatcher) {
}
})
- if stateParams.params.Ops == nil {
- k.fatal("invalid container params")
- }
-
// close setup socket
if err := closeSetup(); err != nil {
msg.Verbosef("cannot close setup pipe: %v", err)
diff --git a/internal/outcome/shim_test.go b/internal/outcome/shim_test.go
index e4de9c37..d493f709 100644
--- a/internal/outcome/shim_test.go
+++ b/internal/outcome/shim_test.go
@@ -106,31 +106,33 @@ func TestShimEntrypoint(t *testing.T) {
Remount(fhs.AbsRoot, syscall.MS_RDONLY),
}
+ templateState := outcomeState{
+ Shim: &shimParams{PrivPID: 0xbad, WaitDelay: 0xf, Verbose: true, Ops: []outcomeOp{
+ &spParamsOp{"xterm-256color", true},
+ &spRuntimeOp{sessionTypeWayland},
+ spTmpdirOp{},
+ spAccountOp{},
+ &spWaylandOp{},
+ &spPulseOp{(*[pulseCookieSizeMax]byte)(bytes.Repeat([]byte{0}, pulseCookieSizeMax)), pulseCookieSizeMax},
+ &spDBusOp{true},
+ &spFilesystemOp{},
+ }},
+
+ ID: &checkExpectInstanceId,
+ Identity: hst.IdentityMax,
+ UserID: 10,
+ Container: hst.Template().Container,
+ Mapuid: 1000,
+ Mapgid: 100,
+ Paths: &env.Paths{TempDir: fhs.AbsTmp, RuntimePath: fhs.AbsRunUser.Append("1000")},
+ }
+
checkSimple(t, "shimEntrypoint", []simpleTestCase{
{"success", func(k *kstub) error { shimEntrypoint(k); return nil }, stub.Expect{Calls: []stub.Call{
call("getMsg", stub.ExpectArgs{}, nil, nil),
call("getLogger", stub.ExpectArgs{}, (*log.Logger)(nil), nil),
call("setDumpable", stub.ExpectArgs{uintptr(container.SUID_DUMP_DISABLE)}, nil, nil),
- call("receive", stub.ExpectArgs{"HAKUREI_SHIM", outcomeState{
- Shim: &shimParams{PrivPID: 0xbad, WaitDelay: 0xf, Verbose: true, Ops: []outcomeOp{
- &spParamsOp{"xterm-256color", true},
- &spRuntimeOp{sessionTypeWayland},
- spTmpdirOp{},
- spAccountOp{},
- &spWaylandOp{},
- &spPulseOp{(*[pulseCookieSizeMax]byte)(bytes.Repeat([]byte{0}, pulseCookieSizeMax)), pulseCookieSizeMax},
- &spDBusOp{true},
- &spFilesystemOp{},
- }},
-
- ID: &checkExpectInstanceId,
- Identity: hst.IdentityMax,
- UserID: 10,
- Container: hst.Template().Container,
- Mapuid: 1000,
- Mapgid: 100,
- Paths: &env.Paths{TempDir: fhs.AbsTmp, RuntimePath: fhs.AbsRunUser.Append("1000")},
- }, nil}, nil, nil),
+ call("receive", stub.ExpectArgs{"HAKUREI_SHIM", templateState, nil}, nil, nil),
call("swapVerbose", stub.ExpectArgs{true}, false, nil),
call("verbosef", stub.ExpectArgs{"process share directory at %q, runtime directory at %q", []any{m("/tmp/hakurei.10"), m("/run/user/1000/hakurei")}}, nil, nil),
call("setupContSignal", stub.ExpectArgs{0xbad}, 0, nil),