From eeb709118024dca017e0c0dd948120b27d55b3a4 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Thu, 22 Jul 2021 11:15:25 +0200 Subject: [PATCH] lib/model: Missing fmut-lock on encryption failures (#7841) --- lib/model/model.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/model/model.go b/lib/model/model.go index 4696dd77d..c02ecfd84 100644 --- a/lib/model/model.go +++ b/lib/model/model.go @@ -1343,12 +1343,14 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi if err := m.ccCheckEncryption(cfg, folderDevice, ccDeviceInfos[folder.ID], deviceCfg.Untrusted); err != nil { sameError := false + m.fmut.Lock() if devs, ok := m.folderEncryptionFailures[folder.ID]; ok { sameError = devs[deviceID] == err } else { m.folderEncryptionFailures[folder.ID] = make(map[protocol.DeviceID]error) } m.folderEncryptionFailures[folder.ID][deviceID] = err + m.fmut.Unlock() msg := fmt.Sprintf("Failure checking encryption consistency with device %v for folder %v: %v", deviceID, cfg.Description(), err) if sameError { l.Debugln(msg) @@ -1361,6 +1363,7 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi } return tempIndexFolders, paused, err } + m.fmut.Lock() if devErrs, ok := m.folderEncryptionFailures[folder.ID]; ok { if len(devErrs) == 1 { delete(m.folderEncryptionFailures, folder.ID) @@ -1368,6 +1371,7 @@ func (m *model) ccHandleFolders(folders []protocol.Folder, deviceCfg config.Devi delete(m.folderEncryptionFailures[folder.ID], deviceID) } } + m.fmut.Unlock() // Handle indexes