1
0
mirror of https://github.com/golang/go synced 2024-11-23 12:00:14 -07:00
go/src/syscall/sock_cloexec_linux.go
Lorenz Bauer 9c8c27a318 syscall: use SOCK_CLOEXEC when creating sockets
LsfSocket, SetLsfPromisc and NetlinkRIB currently don't force the CLOEXEC
flag on the sockets they create. While the former two functions are
deprecated, NetlinkRIB is called by various functions related to
net.Interface.

Add a helper to create CLOEXEC sockets, and use it from SetLsfPromisc and
NetlinkRIB. LsfSocket is unchanged since we don't want to break callers.

Fixes #36053

Change-Id: I72fe2b167996797698d8a44b0d28165045c42d3c
Reviewed-on: https://go-review.googlesource.com/c/go/+/210517
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2019-12-11 00:01:17 +00:00

30 lines
632 B
Go

// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package syscall
// This is a stripped down version of sysSocket from net/sock_cloexec.go.
func cloexecSocket(family, sotype, proto int) (int, error) {
s, err := Socket(family, sotype|SOCK_CLOEXEC, proto)
switch err {
case nil:
return s, nil
default:
return -1, err
case EINVAL:
}
ForkLock.RLock()
s, err = Socket(family, sotype, proto)
if err == nil {
CloseOnExec(s)
}
ForkLock.RUnlock()
if err != nil {
Close(s)
return -1, err
}
return s, nil
}