From 24c73ce2d3d572313fe56bad08819e0ca8b74d26 Mon Sep 17 00:00:00 2001 From: Gleb Fotengauer-Malinovskiy Date: Tue, 20 May 2014 21:02:55 +0400 Subject: [PATCH] Fix race condition during socket creation Docker-DCO-1.1-Signed-off-by: Gleb Fotengauer-Malinovskiy (github: glebfm) --- api/server/server.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/api/server/server.go b/api/server/server.go index f08f395400..58a994c64c 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -1205,11 +1205,20 @@ func ListenAndServe(proto, addr string, job *engine.Job) error { } } + var oldmask int + if proto == "unix" { + oldmask = syscall.Umask(0777) + } + if job.GetenvBool("BufferRequests") { l, err = listenbuffer.NewListenBuffer(proto, addr, activationLock) } else { l, err = net.Listen(proto, addr) } + + if proto == "unix" { + syscall.Umask(oldmask) + } if err != nil { return err } @@ -1247,9 +1256,6 @@ func ListenAndServe(proto, addr string, job *engine.Job) error { log.Println("/!\\ DON'T BIND ON ANOTHER IP ADDRESS THAN 127.0.0.1 IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\") } case "unix": - if err := os.Chmod(addr, 0660); err != nil { - return err - } socketGroup := job.Getenv("SocketGroup") if socketGroup != "" { if err := changeGroup(addr, socketGroup); err != nil { @@ -1261,6 +1267,9 @@ func ListenAndServe(proto, addr string, job *engine.Job) error { } } } + if err := os.Chmod(addr, 0660); err != nil { + return err + } default: return fmt.Errorf("Invalid protocol format.") }