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>
(cherry picked from commit 0538981c31)
This commit is contained in:
Aaron Lehmann 2016-03-30 19:34:51 -07:00 committed by Tibor Vass
parent deb08a1012
commit 2e92a84fa8

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
}