diff options
-rw-r--r-- | runsc/boot/fs.go | 3 | ||||
-rw-r--r-- | runsc/boot/loader_test.go | 22 |
2 files changed, 23 insertions, 2 deletions
diff --git a/runsc/boot/fs.go b/runsc/boot/fs.go index 28c3e8cd0..7243153f2 100644 --- a/runsc/boot/fs.go +++ b/runsc/boot/fs.go @@ -445,6 +445,9 @@ func addSubmountOverlay(ctx context.Context, inode *fs.Inode, submounts []string // children of the given root. The returned paths are relative to the root. func subtargets(root string, mnts []specs.Mount) []string { r := filepath.Clean(root) + if len(r) > 0 && r[len(r)-1] != '/' { + r += "/" + } var targets []string for _, mnt := range mnts { t := filepath.Clean(mnt.Destination) diff --git a/runsc/boot/loader_test.go b/runsc/boot/loader_test.go index 5bc6f1646..3ce7855f6 100644 --- a/runsc/boot/loader_test.go +++ b/runsc/boot/loader_test.go @@ -15,6 +15,7 @@ package boot import ( + "io/ioutil" "os" "sync" "testing" @@ -150,6 +151,12 @@ func TestCreateMountNamespace(t *testing.T) { DisableSeccomp: true, } + testFile, err := ioutil.TempFile(os.TempDir(), "create-mount-namespace-") + if err != nil { + t.Fatalf("ioutil.TempFile() failed, err: %v", err) + } + defer os.RemoveAll(testFile.Name()) + testCases := []struct { name string // Spec that will be used to create the mount manager. Note @@ -202,7 +209,7 @@ func TestCreateMountNamespace(t *testing.T) { expectedPaths: []string{"/some/very/very/deep/path", "/proc", "/dev", "/sys"}, }, { - // Mounts are nested inside eachother. + // Mounts are nested inside each other. name: "nested mounts", spec: specs.Spec{ Root: &specs.Root{ @@ -219,6 +226,16 @@ func TestCreateMountNamespace(t *testing.T) { Type: "tmpfs", }, { + Destination: "/foo/qux", + Source: testFile.Name(), + Type: "bind", + }, + { + // File mounts with the same prefix. + Destination: "/foo/qux-quz", + Type: "tmpfs", + }, + { Destination: "/foo/bar", Type: "tmpfs", }, @@ -233,7 +250,8 @@ func TestCreateMountNamespace(t *testing.T) { }, }, }, - expectedPaths: []string{"/foo", "/foo/bar", "/foo/bar/baz", "/foo/some/very/very/deep/path", "/proc", "/dev", "/sys"}, + expectedPaths: []string{"/foo", "/foo/bar", "/foo/bar/baz", "/foo/qux", + "/foo/qux-quz", "/foo/some/very/very/deep/path", "/proc", "/dev", "/sys"}, }, } |