!125 docker: ensure layer digest folder removed if ls.driver.Remove fails
From: @jackchan8 Reviewed-by: @zhangsong234, @duguhaotian Signed-off-by: @duguhaotian
This commit is contained in:
commit
f3d48fe017
@ -1 +1 @@
|
||||
18.09.0.309
|
||||
18.09.0.310
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
Name: docker-engine
|
||||
Version: 18.09.0
|
||||
Release: 309
|
||||
Release: 310
|
||||
Summary: The open-source application container engine
|
||||
Group: Tools/Docker
|
||||
|
||||
@ -212,6 +212,12 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Thu Sep 15 2022 chenjiankun<chenjiankun1@huawei.com> - 18.09.0-310
|
||||
- Type:bugfix
|
||||
- CVE:NA
|
||||
- SUG:NA
|
||||
- DESC:ensure layer digest folder removed if ls.driver.Remove fails
|
||||
|
||||
* Thu Sep 15 2022 chenjiankun<chenjiankun1@huawei.com> - 18.09.0-309
|
||||
- Type:CVE
|
||||
- CVE:CVE-2022-36109
|
||||
|
||||
@ -1 +1 @@
|
||||
1f53e790e570d524f6ebf5b81c914ddda97f0924
|
||||
faa0fdd6145546a28a82b18855466b66b5bb77f5
|
||||
|
||||
@ -0,0 +1,68 @@
|
||||
From ef17936c73849e17039f0b1558f6a87f70a35890 Mon Sep 17 00:00:00 2001
|
||||
From: zhangsong <zhangsong34@huawei.com>
|
||||
Date: Mon, 29 Aug 2022 11:41:15 +0800
|
||||
Subject: [PATCH] docker: ensure layer digest folder removed if
|
||||
ls.driver.Remove fails
|
||||
|
||||
If image pull fails of context canceled, image layer will perform a
|
||||
rollback operation. When image layer is released, the diff folder
|
||||
of layer will be removed first, and then the digest folder will be
|
||||
removed. If the diff folder fails to be removed, such as operation
|
||||
not permitted or interrupted by others, both the digest folder and diff
|
||||
folder will remain on the disk, this will cause image not be complete
|
||||
and not repairable.
|
||||
|
||||
So we should remove the digest folder first for image layers rollback
|
||||
and ensure image can be re-pulled completely.
|
||||
|
||||
Signed-off-by: zhangsong <zhangsong34@huawei.com>
|
||||
---
|
||||
components/engine/layer/layer_store.go | 14 ++++++++++++--
|
||||
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/components/engine/layer/layer_store.go b/components/engine/layer/layer_store.go
|
||||
index c514ed80..e3030c3c 100644
|
||||
--- a/components/engine/layer/layer_store.go
|
||||
+++ b/components/engine/layer/layer_store.go
|
||||
@@ -311,6 +311,8 @@ func (ls *layerStore) registerWithDescriptor(ts io.Reader, parent ChainID, descr
|
||||
// Release parent chain if error
|
||||
defer func() {
|
||||
if err != nil {
|
||||
+ logrus.Errorf("Create layer cache id: %s, diff id: %s, chain id: %s, error: %v",
|
||||
+ p.cacheID, p.diffID, p.chainID, err)
|
||||
ls.layerL.Lock()
|
||||
ls.releaseLayer(p)
|
||||
ls.layerL.Unlock()
|
||||
@@ -428,12 +430,18 @@ func (ls *layerStore) Map() map[ChainID]Layer {
|
||||
}
|
||||
|
||||
func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error {
|
||||
- err := ls.driver.Remove(layer.cacheID)
|
||||
+ logrus.Debugf("Deleting layer cache id: %s, diff id: %s, chain id: %s",
|
||||
+ layer.cacheID, layer.diffID, layer.chainID)
|
||||
+ err := ls.store.Remove(layer.chainID)
|
||||
if err != nil {
|
||||
+ logrus.Errorf("Remove layer store: cache id: %s, diff id: %s, chain id: %s, error: %v",
|
||||
+ layer.cacheID, layer.diffID, layer.chainID, err)
|
||||
return err
|
||||
}
|
||||
- err = ls.store.Remove(layer.chainID)
|
||||
+ err = ls.driver.Remove(layer.cacheID)
|
||||
if err != nil {
|
||||
+ logrus.Errorf("Remove driver store: cache id: %s, diff id: %s, chain id: %s, error: %v",
|
||||
+ layer.cacheID, layer.diffID, layer.chainID, err)
|
||||
return err
|
||||
}
|
||||
metadata.DiffID = layer.diffID
|
||||
@@ -444,6 +452,8 @@ func (ls *layerStore) deleteLayer(layer *roLayer, metadata *Metadata) error {
|
||||
}
|
||||
metadata.DiffSize = layer.size
|
||||
|
||||
+ logrus.Debugf("Delete layer cache id: %s, diff id: %s, chain id: %s done",
|
||||
+ layer.cacheID, layer.diffID, layer.chainID)
|
||||
return nil
|
||||
}
|
||||
|
||||
--
|
||||
2.27.0
|
||||
|
||||
@ -229,4 +229,5 @@ patch/0228-docker-registry-ensure-default-auth-config-has-address.patch
|
||||
patch/0229-docker-fix-terminal-abnormal-after-docker-run.patch
|
||||
patch/0230-docker-Add-an-ExitPid-field-for-State-struct-to-reco.patch
|
||||
patch/0231-docker-AdditionalGids-must-include-effective-group-I.patch
|
||||
patch/0232-docker-ensure-layer-digest-folder-removed-if-ls.driv.patch
|
||||
#end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user