mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
integration-cli: add bad --cgroup-parent tests
To ensure we don't regress on bad --cgroup-parent paths, add some integration tests that check that the host hasn't toppled (or suddently started to create files in the host). Signed-off-by: Aleksa Sarai <asarai@suse.com>
This commit is contained in:
parent
7fa92c23d5
commit
2bc762e6c8
1 changed files with 78 additions and 0 deletions
|
@ -3466,6 +3466,84 @@ func (s *DockerSuite) TestRunContainerWithCgroupParentAbsPath(c *check.C) {
|
|||
}
|
||||
}
|
||||
|
||||
// TestRunInvalidCgroupParent checks that a specially-crafted cgroup parent doesn't cause Docker to crash or start modifying /.
|
||||
func (s *DockerSuite) TestRunInvalidCgroupParent(c *check.C) {
|
||||
// Not applicable on Windows as uses Unix specific functionality
|
||||
testRequires(c, DaemonIsLinux)
|
||||
|
||||
cgroupParent := "../../../../../../../../SHOULD_NOT_EXIST"
|
||||
cleanCgroupParent := "SHOULD_NOT_EXIST"
|
||||
name := "cgroup-invalid-test"
|
||||
|
||||
out, _, err := dockerCmdWithError("run", "--cgroup-parent", cgroupParent, "--name", name, "busybox", "cat", "/proc/self/cgroup")
|
||||
if err != nil {
|
||||
// XXX: This may include a daemon crash.
|
||||
c.Fatalf("unexpected failure when running container with --cgroup-parent option - %s\n%v", string(out), err)
|
||||
}
|
||||
|
||||
// We expect "/SHOULD_NOT_EXIST" to not exist. If not, we have a security issue.
|
||||
if _, err := os.Stat("/SHOULD_NOT_EXIST"); err == nil || !os.IsNotExist(err) {
|
||||
c.Fatalf("SECURITY: --cgroup-parent with ../../ relative paths cause files to be created in the host (this is bad) !!")
|
||||
}
|
||||
|
||||
cgroupPaths := parseCgroupPaths(string(out))
|
||||
if len(cgroupPaths) == 0 {
|
||||
c.Fatalf("unexpected output - %q", string(out))
|
||||
}
|
||||
id, err := getIDByName(name)
|
||||
c.Assert(err, check.IsNil)
|
||||
expectedCgroup := path.Join(cleanCgroupParent, id)
|
||||
found := false
|
||||
for _, path := range cgroupPaths {
|
||||
if strings.HasSuffix(path, expectedCgroup) {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
c.Fatalf("unexpected cgroup paths. Expected at least one cgroup path to have suffix %q. Cgroup Paths: %v", expectedCgroup, cgroupPaths)
|
||||
}
|
||||
}
|
||||
|
||||
// TestRunInvalidCgroupParent checks that a specially-crafted cgroup parent doesn't cause Docker to crash or start modifying /.
|
||||
func (s *DockerSuite) TestRunAbsoluteInvalidCgroupParent(c *check.C) {
|
||||
// Not applicable on Windows as uses Unix specific functionality
|
||||
testRequires(c, DaemonIsLinux)
|
||||
|
||||
cgroupParent := "/../../../../../../../../SHOULD_NOT_EXIST"
|
||||
cleanCgroupParent := "/SHOULD_NOT_EXIST"
|
||||
name := "cgroup-absolute-invalid-test"
|
||||
|
||||
out, _, err := dockerCmdWithError("run", "--cgroup-parent", cgroupParent, "--name", name, "busybox", "cat", "/proc/self/cgroup")
|
||||
if err != nil {
|
||||
// XXX: This may include a daemon crash.
|
||||
c.Fatalf("unexpected failure when running container with --cgroup-parent option - %s\n%v", string(out), err)
|
||||
}
|
||||
|
||||
// We expect "/SHOULD_NOT_EXIST" to not exist. If not, we have a security issue.
|
||||
if _, err := os.Stat("/SHOULD_NOT_EXIST"); err == nil || !os.IsNotExist(err) {
|
||||
c.Fatalf("SECURITY: --cgroup-parent with /../../ garbage paths cause files to be created in the host (this is bad) !!")
|
||||
}
|
||||
|
||||
cgroupPaths := parseCgroupPaths(string(out))
|
||||
if len(cgroupPaths) == 0 {
|
||||
c.Fatalf("unexpected output - %q", string(out))
|
||||
}
|
||||
id, err := getIDByName(name)
|
||||
c.Assert(err, check.IsNil)
|
||||
expectedCgroup := path.Join(cleanCgroupParent, id)
|
||||
found := false
|
||||
for _, path := range cgroupPaths {
|
||||
if strings.HasSuffix(path, expectedCgroup) {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
c.Fatalf("unexpected cgroup paths. Expected at least one cgroup path to have suffix %q. Cgroup Paths: %v", expectedCgroup, cgroupPaths)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *DockerSuite) TestRunContainerWithCgroupMountRO(c *check.C) {
|
||||
// Not applicable on Windows as uses Unix specific functionality
|
||||
// --read-only + userns has remount issues
|
||||
|
|
Loading…
Add table
Reference in a new issue