// +build go1.10 package cap import "syscall" // LaunchSupported indicates that is safe to return from a locked // OS Thread and have that OS Thread be terminated by the runtime. The // Launch functionality really needs to rely on the fact that an // excess of runtime.LockOSThread() vs. runtime.UnlockOSThread() calls // in a returning go routine will cause the underlying locked OSThread // to terminate. That feature was added to the Go runtime in version // 1.10. // // See these bugs for the discussion and feature assumed by the code // in this Launch() functionality: // // https://github.com/golang/go/issues/20395 // https://github.com/golang/go/issues/20458 // // A value of false for this constant causes the Launch functionality // to fail with an error: cap.ErrNoLaunch. If this value is false you // have two choices with respect to the Launch functionality: // // 1) don't use cap.(*Launcher).Launch() // 2) upgrade your Go toolchain to 1.10+ (ie., do this one). const LaunchSupported = true // validatePA confirms that the pa.Sys entry is not incompatible with // Launch and loads up the chroot value. func validatePA(pa *syscall.ProcAttr, chroot string) (bool, error) { s := pa.Sys if s == nil { if chroot == "" { return false, nil } s = &syscall.SysProcAttr{ Chroot: chroot, } pa.Sys = s } else if s.Chroot != "" { return false, ErrAmbiguousChroot } if s.Credential != nil { return false, ErrAmbiguousIDs } if len(s.AmbientCaps) != 0 { return false, ErrAmbiguousAmbient } return s != nil && s.Chroot != "", nil }