Fix layer store Get locking
Get was calling getReference without layerL held. This meant writes to the references map could race. Such races are dangerous because they can corrupt the map and crash the process. Fixes #21616 Fixes #21674 Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com> Upstream-commit: 0538981c31a714a4183e846a4b512deb7879cc29 Component: engine
This commit is contained in:
@@ -334,7 +334,10 @@ func (ls *layerStore) get(l ChainID) *roLayer {
|
||||
}
|
||||
|
||||
func (ls *layerStore) Get(l ChainID) (Layer, error) {
|
||||
layer := ls.get(l)
|
||||
ls.layerL.Lock()
|
||||
defer ls.layerL.Unlock()
|
||||
|
||||
layer := ls.getWithoutLock(l)
|
||||
if layer == nil {
|
||||
return nil, ErrLayerDoesNotExist
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user