check for duplicate nspath possibilities

Signed-off-by: Mike Brown <brownwm@us.ibm.com>
This commit is contained in:
Mike Brown 2022-04-14 01:25:30 +00:00
parent e079e4a155
commit 147f0a7e02

View File

@ -52,7 +52,9 @@ import (
// path to the network namespace. // path to the network namespace.
func newNS(baseDir string) (nsPath string, err error) { func newNS(baseDir string) (nsPath string, err error) {
b := make([]byte, 16) b := make([]byte, 16)
if _, err := rand.Reader.Read(b); err != nil {
_, err = rand.Read(b)
if err != nil {
return "", fmt.Errorf("failed to generate random netns name: %w", err) return "", fmt.Errorf("failed to generate random netns name: %w", err)
} }
@ -63,10 +65,10 @@ func newNS(baseDir string) (nsPath string, err error) {
return "", err return "", err
} }
// create an empty file at the mount point // create an empty file at the mount point and fail if it already exists
nsName := fmt.Sprintf("cni-%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:]) nsName := fmt.Sprintf("cni-%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:])
nsPath = path.Join(baseDir, nsName) nsPath = path.Join(baseDir, nsName)
mountPointFd, err := os.Create(nsPath) mountPointFd, err := os.OpenFile(nsPath, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0666)
if err != nil { if err != nil {
return "", err return "", err
} }