Skip to content

Commit d3133ff

Browse files
committed
perms: hold the mutex for any public call
1 parent 03bfb63 commit d3133ff

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

perms/manager.go

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ type Manager struct {
3333
// are available for use. This map will start out not including any of
3434
// lnd's sub-server permissions. Only when the LND build tags are
3535
// obtained and OnLNDBuildTags is called will this map include the
36-
// available LND sub-server permissions. This map must only be accessed
37-
// once the permsMu mutex is held.
38-
perms map[string][]bakery.Op
39-
permsMu sync.RWMutex
36+
// available LND sub-server permissions.
37+
perms map[string][]bakery.Op
38+
39+
mu sync.RWMutex
4040
}
4141

4242
// NewManager constructs a new Manager instance and collects any of the
@@ -105,8 +105,8 @@ func NewManager(withAllSubServers bool) (*Manager, error) {
105105
// that it does not require a macaroon for validation. A URL is considered
106106
// white-listed if it has no operations associated with a URL.
107107
func (pm *Manager) IsWhiteListedURL(url string) bool {
108-
pm.permsMu.Lock()
109-
defer pm.permsMu.Unlock()
108+
pm.mu.Lock()
109+
defer pm.mu.Unlock()
110110

111111
ops, ok := pm.perms[url]
112112

@@ -118,8 +118,8 @@ func (pm *Manager) IsWhiteListedURL(url string) bool {
118118
func (pm *Manager) RegisterSubServer(name string,
119119
permissions map[string][]bakery.Op, whiteListURLs map[string]struct{}) {
120120

121-
pm.permsMu.Lock()
122-
defer pm.permsMu.Unlock()
121+
pm.mu.Lock()
122+
defer pm.mu.Unlock()
123123

124124
pm.fixedPerms[name] = permissions
125125

@@ -142,8 +142,8 @@ func (pm *Manager) RegisterSubServer(name string,
142142
// permissions to add to the main permissions list. This method should only
143143
// be called once.
144144
func (pm *Manager) OnLNDBuildTags(lndBuildTags []string) {
145-
pm.permsMu.Lock()
146-
defer pm.permsMu.Unlock()
145+
pm.mu.Lock()
146+
defer pm.mu.Unlock()
147147

148148
tagLookup := make(map[string]bool)
149149
for _, t := range lndBuildTags {
@@ -170,8 +170,8 @@ func (pm *Manager) OnLNDBuildTags(lndBuildTags []string) {
170170
// the uri is known to the manager. The second return parameter will be false
171171
// if the URI is unknown to the manager.
172172
func (pm *Manager) URIPermissions(uri string) ([]bakery.Op, bool) {
173-
pm.permsMu.RLock()
174-
defer pm.permsMu.RUnlock()
173+
pm.mu.RLock()
174+
defer pm.mu.RUnlock()
175175

176176
ops, ok := pm.perms[uri]
177177
return ops, ok
@@ -182,8 +182,8 @@ func (pm *Manager) URIPermissions(uri string) ([]bakery.Op, bool) {
182182
// are a list of URIs that match the regex and the boolean represents whether
183183
// the given uri is in fact a regex.
184184
func (pm *Manager) MatchRegexURI(uriRegex string) ([]string, bool) {
185-
pm.permsMu.RLock()
186-
defer pm.permsMu.RUnlock()
185+
pm.mu.RLock()
186+
defer pm.mu.RUnlock()
187187

188188
// If the given uri string is one of our permissions, then it is not
189189
// a regex.
@@ -215,8 +215,8 @@ func (pm *Manager) MatchRegexURI(uriRegex string) ([]string, bool) {
215215
// manager is aware of. Optionally, readOnly can be set to true if only the
216216
// read-only permissions should be returned.
217217
func (pm *Manager) ActivePermissions(readOnly bool) []bakery.Op {
218-
pm.permsMu.RLock()
219-
defer pm.permsMu.RUnlock()
218+
pm.mu.RLock()
219+
defer pm.mu.RUnlock()
220220

221221
// De-dup the permissions and optionally apply the read-only filter.
222222
dedupMap := make(map[string]map[string]bool)
@@ -256,6 +256,9 @@ func (pm *Manager) ActivePermissions(readOnly bool) []bakery.Op {
256256
// _except_ for any LND permissions. In other words, this returns permissions
257257
// for which the external validator of Lit is responsible.
258258
func (pm *Manager) GetLitPerms() map[string][]bakery.Op {
259+
pm.mu.Lock()
260+
defer pm.mu.Unlock()
261+
259262
result := make(map[string][]bakery.Op)
260263
for subserver, ops := range pm.fixedPerms {
261264
if subserver == lndPerms {
@@ -271,6 +274,9 @@ func (pm *Manager) GetLitPerms() map[string][]bakery.Op {
271274

272275
// IsSubServerURI if the given URI belongs to the RPC of the given server.
273276
func (pm *Manager) IsSubServerURI(name string, uri string) bool {
277+
pm.mu.Lock()
278+
defer pm.mu.Unlock()
279+
274280
if name == lndPerms {
275281
return pm.isLndURI(uri)
276282
}

0 commit comments

Comments
 (0)