From 0538981c31a714a4183e846a4b512deb7879cc29 Mon Sep 17 00:00:00 2001 From: Aaron Lehmann Date: Wed, 30 Mar 2016 19:34:51 -0700 Subject: [PATCH] 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 --- layer/layer_store.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/layer/layer_store.go b/layer/layer_store.go index fa436f098b..12de1d5983 100644 --- a/layer/layer_store.go +++ b/layer/layer_store.go @@ -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 }