From 2ca4487c2680af18a6c224d3e3ccf04e3688bdae Mon Sep 17 00:00:00 2001 From: fanjiyun Date: Tue, 30 Jan 2018 16:02:59 +0800 Subject: [PATCH] When id is empty for overlay2/overlay, do not remove the directories. Signed-off-by: fanjiyun Signed-off-by: Sebastiaan van Stijn Upstream-commit: 0e8f96e31724a7bb49d0ade9acec116f68c85c74 Component: engine --- components/engine/daemon/graphdriver/overlay/overlay.go | 3 +++ components/engine/daemon/graphdriver/overlay2/overlay.go | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/components/engine/daemon/graphdriver/overlay/overlay.go b/components/engine/daemon/graphdriver/overlay/overlay.go index 62dc26a871..0c2167f083 100644 --- a/components/engine/daemon/graphdriver/overlay/overlay.go +++ b/components/engine/daemon/graphdriver/overlay/overlay.go @@ -366,6 +366,9 @@ func (d *Driver) dir(id string) string { // Remove cleans the directories that are created for this id. func (d *Driver) Remove(id string) error { + if id == "" { + return fmt.Errorf("refusing to remove the directories: id is empty") + } d.locker.Lock(id) defer d.locker.Unlock(id) return system.EnsureRemoveAll(d.dir(id)) diff --git a/components/engine/daemon/graphdriver/overlay2/overlay.go b/components/engine/daemon/graphdriver/overlay2/overlay.go index 2b52adb858..5108a2c055 100644 --- a/components/engine/daemon/graphdriver/overlay2/overlay.go +++ b/components/engine/daemon/graphdriver/overlay2/overlay.go @@ -513,12 +513,17 @@ func (d *Driver) getLowerDirs(id string) ([]string, error) { // Remove cleans the directories that are created for this id. func (d *Driver) Remove(id string) error { + if id == "" { + return fmt.Errorf("refusing to remove the directories: id is empty") + } d.locker.Lock(id) defer d.locker.Unlock(id) dir := d.dir(id) lid, err := ioutil.ReadFile(path.Join(dir, "link")) if err == nil { - if err := os.RemoveAll(path.Join(d.home, linkDir, string(lid))); err != nil { + if len(lid) == 0 { + logrus.WithField("storage-driver", "overlay2").Errorf("refusing to remove empty link for layer %v", id) + } else if err := os.RemoveAll(path.Join(d.home, linkDir, string(lid))); err != nil { logrus.WithField("storage-driver", "overlay2").Debugf("Failed to remove link: %v", err) } }