pkg/ns: fixed the check for network namespace path.
The expectation on older kernels (< 3.19) was to have the network namespace always be a directory. This is not true if the network namespace is bind mounted to a file, and will make the plugin fail erroneously in such cases. The fix is to remove this assumption completely and just do a basic check on the file system types being returned. Fixes #288
This commit is contained in:
parent
5c3c171642
commit
7281d5792a
15
pkg/ns/ns.go
15
pkg/ns/ns.go
@ -20,7 +20,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
@ -101,19 +100,7 @@ func IsNSorErr(nspath string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch stat.Type {
|
switch stat.Type {
|
||||||
case PROCFS_MAGIC:
|
case PROCFS_MAGIC, NSFS_MAGIC:
|
||||||
// Kernel < 3.19
|
|
||||||
|
|
||||||
validPathContent := "ns/"
|
|
||||||
validName := strings.Contains(nspath, validPathContent)
|
|
||||||
if !validName {
|
|
||||||
return NSPathNotNSErr{msg: fmt.Sprintf("path %q doesn't contain %q", nspath, validPathContent)}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
case NSFS_MAGIC:
|
|
||||||
// Kernel >= 3.19
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return NSPathNotNSErr{msg: fmt.Sprintf("unknown FS magic on %q: %x", nspath, stat.Type)}
|
return NSPathNotNSErr{msg: fmt.Sprintf("unknown FS magic on %q: %x", nspath, stat.Type)}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user