aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/app/start.go26
-rw-r--r--internal/proc/priv/shim/main.go10
-rw-r--r--internal/proc/priv/shim/manager.go13
3 files changed, 25 insertions, 24 deletions
diff --git a/internal/app/start.go b/internal/app/start.go
index a0729c32..1755b333 100644
--- a/internal/app/start.go
+++ b/internal/app/start.go
@@ -45,32 +45,19 @@ func (a *app) Run(ctx context.Context, rs *RunState) error {
}
}
- a.shim = new(shim.Shim)
- // keep a reference to shim payload for sync fd
- payload := &shim.Payload{
- Argv: a.seal.command,
- Exec: shimExec,
- Bwrap: a.seal.sys.bwrap,
- Home: a.seal.sys.user.data,
-
- Verbose: fmsg.Verbose(),
- }
-
// startup will go ahead, commit system setup
if err := a.seal.sys.Commit(); err != nil {
return err
}
a.seal.sys.needRevert = true
- // export sync pipe from sys
- a.seal.sys.bwrap.SetSync(a.seal.sys.Sync())
-
// start shim via manager
+ a.shim = new(shim.Shim)
waitErr := make(chan error, 1)
if startTime, err := a.shim.Start(
a.seal.sys.user.as,
a.seal.sys.user.supp,
- payload,
+ a.seal.sys.Sync(),
); err != nil {
return err
} else {
@@ -88,7 +75,14 @@ func (a *app) Run(ctx context.Context, rs *RunState) error {
}()
// send payload
- if err = a.shim.Serve(shimSetupCtx, payload); err != nil {
+ if err = a.shim.Serve(shimSetupCtx, &shim.Payload{
+ Argv: a.seal.command,
+ Exec: shimExec,
+ Bwrap: a.seal.sys.bwrap,
+ Home: a.seal.sys.user.data,
+
+ Verbose: fmsg.Verbose(),
+ }); err != nil {
return err
}
diff --git a/internal/proc/priv/shim/main.go b/internal/proc/priv/shim/main.go
index 85a425bf..49ec7f1a 100644
--- a/internal/proc/priv/shim/main.go
+++ b/internal/proc/priv/shim/main.go
@@ -62,8 +62,9 @@ func Main() {
}
// restore bwrap sync fd
+ var syncFd *os.File
if payload.Sync != nil {
- payload.Bwrap.SetSync(os.NewFile(*payload.Sync, "sync"))
+ syncFd = os.NewFile(*payload.Sync, "sync")
}
// close setup socket
@@ -134,8 +135,11 @@ func Main() {
conf.Symlink("fortify", innerInit)
helper.BubblewrapName = payload.Exec[0] // resolved bwrap path by parent
- if b, err := helper.NewBwrap(conf, nil, innerInit,
- func(int, int) []string { return make([]string, 0) }); err != nil {
+ if b, err := helper.NewBwrap(
+ conf, innerInit,
+ nil, func(int, int) []string { return make([]string, 0) },
+ syncFd,
+ ); err != nil {
fmsg.Fatalf("malformed sandbox config: %v", err)
} else {
cmd := b.Unwrap()
diff --git a/internal/proc/priv/shim/manager.go b/internal/proc/priv/shim/manager.go
index 008b80aa..064f5c87 100644
--- a/internal/proc/priv/shim/manager.go
+++ b/internal/proc/priv/shim/manager.go
@@ -24,6 +24,8 @@ type Shim struct {
killFallback chan error
// monitor to shim encoder
encoder *gob.Encoder
+ // bwrap --sync-fd value
+ sync *uintptr
}
func (s *Shim) String() string {
@@ -46,8 +48,8 @@ func (s *Shim) Start(
aid string,
// string representation of supplementary group ids
supp []string,
- // shim setup payload
- payload *Payload,
+ // bwrap --sync-fd
+ syncFd *os.File,
) (*time.Time, error) {
// prepare user switcher invocation
var fsu string
@@ -80,9 +82,9 @@ func (s *Shim) Start(
s.cmd.Dir = "/"
// pass sync fd if set
- if payload.Bwrap.Sync() != nil {
- fd := proc.ExtraFile(s.cmd, payload.Bwrap.Sync())
- payload.Sync = &fd
+ if syncFd != nil {
+ fd := proc.ExtraFile(s.cmd, syncFd)
+ s.sync = &fd
}
fmsg.VPrintln("starting shim via fsu:", s.cmd)
@@ -106,6 +108,7 @@ func (s *Shim) Serve(ctx context.Context, payload *Payload) error {
}
defer func() { killShim() }()
+ payload.Sync = s.sync
encodeErr := make(chan error)
go func() { encodeErr <- s.encoder.Encode(payload) }()