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:
Aaron Lehmann
2016-03-30 19:34:51 -07:00
parent c4d2d001a2
commit c005ab5e62
+4 -1
View File
@@ -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
}