Skip to content
This repository has been archived by the owner on May 12, 2021. It is now read-only.

Commit

Permalink
virtcontainers: Use only supported namespaces
Browse files Browse the repository at this point in the history
Depending of the linux versions some namespaces are supported or not.
To avoid failures running containers and unit tests in old linux kernels,
only the supported namespaces should be used.

Depends-on: github.com/kata-containers/tests#1414

fixes #228

Signed-off-by: Julio Montes <julio.montes@intel.com>
  • Loading branch information
Julio Montes committed Apr 9, 2019
1 parent 23c00ff commit 0b430dc
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 25 deletions.
24 changes: 17 additions & 7 deletions virtcontainers/pkg/nsenter/nsenter.go
Expand Up @@ -49,13 +49,7 @@ const (

// CloneFlagsTable is exported so that consumers of this package don't need
// to define this same table again.
var CloneFlagsTable = map[NSType]int{
NSTypeCGroup: unix.CLONE_NEWCGROUP,
NSTypeIPC: unix.CLONE_NEWIPC,
NSTypeNet: unix.CLONE_NEWNET,
NSTypePID: unix.CLONE_NEWPID,
NSTypeUTS: unix.CLONE_NEWUTS,
}
var CloneFlagsTable = make(map[NSType]int)

// Namespace describes a namespace that will be entered.
type Namespace struct {
Expand All @@ -69,6 +63,22 @@ type nsPair struct {
threadNS *os.File
}

func init() {
var ns = map[NSType]int{
NSTypeCGroup: unix.CLONE_NEWCGROUP,
NSTypeIPC: unix.CLONE_NEWIPC,
NSTypeNet: unix.CLONE_NEWNET,
NSTypePID: unix.CLONE_NEWPID,
NSTypeUTS: unix.CLONE_NEWUTS,
}

for k, v := range ns {
if _, err := os.Stat(fmt.Sprint("/proc/self/ns/", string(k))); err == nil {
CloneFlagsTable[k] = v
}
}
}

func getNSPathFromPID(pid int, nsType NSType) string {
return filepath.Join(procRootPath, strconv.Itoa(pid), nsDirPath, string(nsType))
}
Expand Down
37 changes: 19 additions & 18 deletions virtcontainers/pkg/nsenter/nsenter_test.go
Expand Up @@ -138,30 +138,31 @@ func TestSetNSWrongFileFailure(t *testing.T) {
assert.NotNil(t, err, "Should fail because file is not a namespace")
}

var testNamespaceList = []Namespace{
{
Type: NSTypeCGroup,
},
{
Type: NSTypeIPC,
},
{
Type: NSTypeNet,
},
{
Type: NSTypePID,
},
{
Type: NSTypeUTS,
},
func supportedNamespaces() []Namespace {
var list []Namespace
var ns = []Namespace{
{Type: NSTypeCGroup},
{Type: NSTypeIPC},
{Type: NSTypeNet},
{Type: NSTypePID},
{Type: NSTypeUTS},
}

for _, n := range ns {
if _, err := os.Stat(fmt.Sprint("/proc/self/ns/", string(n.Type))); err == nil {
list = append(list, n)
}
}

return list
}

func testToRunNil() error {
return nil
}

func TestNsEnterEmptyPathAndPIDFromNSListFailure(t *testing.T) {
err := NsEnter(testNamespaceList, testToRunNil)
err := NsEnter(supportedNamespaces(), testToRunNil)
assert.NotNil(t, err, "Should fail because neither a path nor a PID"+
" has been provided by every namespace of the list")
}
Expand All @@ -172,7 +173,7 @@ func TestNsEnterEmptyNamespaceListSuccess(t *testing.T) {
}

func TestNsEnterSuccessful(t *testing.T) {
nsList := testNamespaceList
nsList := supportedNamespaces()
sleepDuration := 60

cloneFlags := 0
Expand Down

0 comments on commit 0b430dc

Please sign in to comment.