authz cache holds the global lock across signer queries (#1430 fix never landed) #2223
AuthzCache.getSigners takes the process-wide write lock and holds it across GranteesByMessageType and AccountByAddress. A failed lookup is not cached, so the next request for the same granter takes the lock and queries again. One slow or failing granter stalls every other signer lookup on that dapi, including an honest POST /v1/poc/proofs.
Documented and patched in #1430 (item 2). That PR was closed unmerged on 2026-09-26; the commits are on no branch. The same code is still on main and the current release line.
The HackerOne report that shows this via an unsigned proof request and a granter whose grant scan exceeds the default 10M query gas limit was closed Informative: the lock was already public in #1430. Not a hotfix. Nice-to-have for a future upgrade.
Candidate fix already sits on unmerged #1855 (42fd0f4c9, 9f397f07e): query outside the lock, cache failures for a few seconds, do not store a canceled caller, NotFound, or an address that does not parse. The chain-side grant cap in that same PR is a separate change and does not by itself release the lock.
🔄 Auto-synced from Issue #2223 every hour.