Fix race condition during socket creation

Docker-DCO-1.1-Signed-off-by: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org> (github: glebfm)
This commit is contained in:
Gleb Fotengauer-Malinovskiy 2014-05-20 21:02:55 +04:00
parent e5202de918
commit 24c73ce2d3
1 changed files with 12 additions and 3 deletions

View File

@ -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") { if job.GetenvBool("BufferRequests") {
l, err = listenbuffer.NewListenBuffer(proto, addr, activationLock) l, err = listenbuffer.NewListenBuffer(proto, addr, activationLock)
} else { } else {
l, err = net.Listen(proto, addr) l, err = net.Listen(proto, addr)
} }
if proto == "unix" {
syscall.Umask(oldmask)
}
if err != nil { if err != nil {
return err 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 /!\\") 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": case "unix":
if err := os.Chmod(addr, 0660); err != nil {
return err
}
socketGroup := job.Getenv("SocketGroup") socketGroup := job.Getenv("SocketGroup")
if socketGroup != "" { if socketGroup != "" {
if err := changeGroup(addr, socketGroup); err != nil { 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: default:
return fmt.Errorf("Invalid protocol format.") return fmt.Errorf("Invalid protocol format.")
} }