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>
This commit is contained in:
parent
1e1da2a29b
commit
0538981c31
1 changed files with 4 additions and 1 deletions
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue