Skip to content

Commit 3afba98

Browse files
committed
2020-02-21-netns: fix return value of createNamespace
createNamespace() was not returning the original namespace file descriptor because of variable shadowing. Fix this.
1 parent ab8706f commit 3afba98

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

2020-02-21-netns/main.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,31 +111,33 @@ func createNamespace(name string) (*os.File, error) {
111111
// unshare(CLONE_NEWNET) = 0
112112
// mount("/proc/self/ns/net", "/var/run/netns/ns0", 0x56177d0e29a5, MS_BIND, NULL) = 0
113113
log.Printf("createNamespace")
114-
f, err := unshare()
114+
origF, err := unshare()
115115
if err != nil {
116116
return nil, err
117117
}
118118

119119
if err := mountNamespaceDir(); err != nil {
120-
closeFile(f)
120+
closeFile(origF)
121121
return nil, err
122122
}
123123

124124
nsPath := filepath.Join(nsDir, name)
125-
f, err = os.Create(nsPath)
125+
f, err := os.Create(nsPath)
126126
if err != nil {
127+
closeFile(origF)
127128
return nil, err
128129
}
129130
if f.Close(); err != nil {
131+
closeFile(origF)
130132
return nil, err
131133
}
132134

133135
err = syscall.Mount("/proc/self/ns/net", nsPath, "", syscall.MS_BIND, "")
134136
if err != nil {
135-
closeFile(f)
137+
closeFile(origF)
136138
return nil, err
137139
}
138-
return f, nil
140+
return origF, nil
139141
}
140142

141143
// Sets namespace to /var/run/netns/${name}, creating
@@ -192,7 +194,9 @@ func main() {
192194
flag.Usage = func() {
193195
fmt.Fprintf(
194196
flag.CommandLine.Output(),
195-
"Usage: %s NAMESPACE COMMAND ARG...\n",
197+
"Usage: %s NAMESPACE COMMAND ARG...\n"+
198+
"Runs COMMAND in the given named network NAMESPACE,\n"+
199+
"creating the namespace if it doesn't already exist.\n",
196200
os.Args[0])
197201
flag.PrintDefaults()
198202
}

0 commit comments

Comments
 (0)