From 7b75796a6056e5ef65518c37008a1176417d2797 Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Thu, 11 Jul 2019 13:23:14 +0200 Subject: cgroups: fix a leak when using cgroupfs be sure to load all the existing handlers, so that they can also be freed in addition to the handlers we treat differently. Signed-off-by: Giuseppe Scrivano --- pkg/cgroups/cgroups.go | 7 +++++++ test/e2e/pod_rm_test.go | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/pkg/cgroups/cgroups.go b/pkg/cgroups/cgroups.go index de7f3fd0e..081db772f 100644 --- a/pkg/cgroups/cgroups.go +++ b/pkg/cgroups/cgroups.go @@ -327,6 +327,13 @@ func Load(path string) (*CgroupControl, error) { path: path, systemd: false, } + if !cgroup2 { + controllers, err := getAvailableControllers(handlers, false) + if err != nil { + return nil, err + } + control.additionalControllers = controllers + } if !cgroup2 { for name := range handlers { p := control.getCgroupv1Path(name) diff --git a/test/e2e/pod_rm_test.go b/test/e2e/pod_rm_test.go index 0d3f47f30..f0689f152 100644 --- a/test/e2e/pod_rm_test.go +++ b/test/e2e/pod_rm_test.go @@ -3,6 +3,8 @@ package integration import ( "fmt" "os" + "path/filepath" + "strings" . "github.com/containers/libpod/test/utils" . "github.com/onsi/ginkgo" @@ -40,6 +42,21 @@ var _ = Describe("Podman pod rm", func() { result := podmanTest.Podman([]string{"pod", "rm", podid}) result.WaitWithDefaultTimeout() Expect(result.ExitCode()).To(Equal(0)) + + // Also check that we don't leak cgroups + err := filepath.Walk("/sys/fs/cgroup", func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.IsDir() { + Expect(err).To(BeNil()) + } + if strings.Contains(info.Name(), podid) { + return fmt.Errorf("leaking cgroup path %s", path) + } + return nil + }) + Expect(err).To(BeNil()) }) It("podman pod rm latest pod", func() { -- cgit v1.2.3-54-g00ecf