diff --git a/libcontainer/cgroups/systemd/common.go b/libcontainer/cgroups/systemd/common.go index 1f4d8aa21..67c612780 100644 --- a/libcontainer/cgroups/systemd/common.go +++ b/libcontainer/cgroups/systemd/common.go @@ -313,7 +313,7 @@ func getUnitName(c *configs.Cgroup) string { // isDbusError returns true if the error is a specific dbus error. func isDbusError(err error, name string) bool { if err != nil { - var derr *dbus.Error + var derr dbus.Error if errors.As(err, &derr) { return strings.Contains(derr.Name, name) } diff --git a/libcontainer/cgroups/systemd/systemd_test.go b/libcontainer/cgroups/systemd/systemd_test.go index e4190fa5d..cee176579 100644 --- a/libcontainer/cgroups/systemd/systemd_test.go +++ b/libcontainer/cgroups/systemd/systemd_test.go @@ -168,3 +168,28 @@ func TestSkipDevicesFalse(t *testing.T) { "cat: /dev/null: Operation not permitted", }) } + +func TestUnitExistsIgnored(t *testing.T) { + if !IsRunningSystemd() { + t.Skip("Test requires systemd.") + } + if os.Geteuid() != 0 { + t.Skip("Test requires root.") + } + + podConfig := &configs.Cgroup{ + Parent: "system.slice", + Name: "system-runc_test_exists.slice", + Resources: &configs.Resources{}, + } + // Create "pods" cgroup (a systemd slice to hold containers). + pm := newManager(podConfig) + defer pm.Destroy() //nolint:errcheck + + // create twice to make sure "UnitExists" error is ignored. + for i := 0; i < 2; i++ { + if err := pm.Apply(-1); err != nil { + t.Fatal(err) + } + } +}