Skip to content

Commit de24fda

Browse files
committed
[docker-up] don't leak passed socket
1 parent 26070eb commit de24fda

File tree

1 file changed

+21
-10
lines changed
  • components/docker-up/docker-up

1 file changed

+21
-10
lines changed

components/docker-up/docker-up/main.go

+21-10
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,25 @@ const (
6363
)
6464

6565
func main() {
66+
listenFDs, _ := strconv.Atoi(os.Getenv("LISTEN_FDS"))
67+
err := run(listenFDs)
68+
if err == nil {
69+
return
70+
}
71+
// ensure to close passed FD to avoid leaking them
72+
// in case we fail to start dockerd
73+
if listenFDs > 0 {
74+
for fd := 3; fd < listenFDs+3; fd++ {
75+
_ = unix.Close(fd)
76+
}
77+
}
78+
logrus.WithError(err).Fatal("failed")
79+
}
80+
81+
func run(listenFDs int) (err error) {
6682
self, err := os.Executable()
6783
if err != nil {
68-
logrus.WithError(err).Fatal()
84+
return err
6985
}
7086

7187
pflag.BoolVarP(&opts.Verbose, "verbose", "v", false, "enables verbose logging")
@@ -85,23 +101,18 @@ func main() {
85101

86102
listenFD := os.Getenv("LISTEN_FDS") != ""
87103
if _, err := os.Stat(dockerSocketFN); !listenFD && (err == nil || !os.IsNotExist(err)) {
88-
logger.Fatalf("Docker socket already exists at %s.\nIn a Gitpod workspace Docker will start automatically when used.\nIf all else fails, please remove %s and try again.", dockerSocketFN, dockerSocketFN)
104+
return xerrors.Errorf("Docker socket already exists at %s.\nIn a Gitpod workspace Docker will start automatically when used.\nIf all else fails, please remove %s and try again.", dockerSocketFN, dockerSocketFN)
89105
}
90106

91107
err = ensurePrerequisites()
92108
if err != nil {
93-
log.WithError(err).Fatal("failed")
109+
return err
94110
}
95111

96-
err = runWithinNetns()
97-
if err != nil {
98-
log.WithError(err).Fatal("failed")
99-
}
112+
return runWithinNetns(listenFDs)
100113
}
101114

102-
func runWithinNetns() (err error) {
103-
listenFDs, _ := strconv.Atoi(os.Getenv("LISTEN_FDS"))
104-
115+
func runWithinNetns(listenFDs int) (err error) {
105116
args := []string{
106117
"--data-root=/workspace/.docker-root",
107118
}

0 commit comments

Comments
 (0)