Bug 1941994 - avoid deadlock in WinWebAuthnService GetAutoFillEntries. r=keeler

Differential Revision: https://phabricator.services.mozilla.com/D235082
This commit is contained in:
John Schanck
2025-01-22 21:12:38 +00:00
parent 13767d0c64
commit 65883c68a3

View File

@@ -971,10 +971,16 @@ WinWebAuthnService::HasPendingConditionalGet(uint64_t aBrowsingContextId,
NS_IMETHODIMP
WinWebAuthnService::GetAutoFillEntries(
uint64_t aTransactionId, nsTArray<RefPtr<nsIWebAuthnAutoFillEntry>>& aRv) {
auto guard = mTransactionState.Lock();
if (guard->isNothing() || guard->ref().transactionId != aTransactionId ||
guard->ref().pendingSignArgs.isNothing()) {
return NS_ERROR_NOT_AVAILABLE;
aRv.Clear();
nsString rpId;
{
auto guard = mTransactionState.Lock();
if (guard->isNothing() || guard->ref().transactionId != aTransactionId ||
guard->ref().pendingSignArgs.isNothing()) {
return NS_ERROR_NOT_AVAILABLE;
}
Unused << guard->ref().pendingSignArgs.ref()->GetRpId(rpId);
}
StaticAutoReadLock moduleLock(gWinWebAuthnModuleLock);
@@ -982,8 +988,6 @@ WinWebAuthnService::GetAutoFillEntries(
return NS_ERROR_NOT_AVAILABLE;
}
aRv.Clear();
if (gWinWebauthnGetApiVersionNumber() < WEBAUTHN_API_VERSION_4) {
// GetPlatformCredentialList was added in version 4. Earlier versions
// can still present a generic "Use a Passkey" autofill entry, so
@@ -991,9 +995,6 @@ WinWebAuthnService::GetAutoFillEntries(
return NS_OK;
}
nsString rpId;
Unused << guard->ref().pendingSignArgs.ref()->GetRpId(rpId);
WEBAUTHN_GET_CREDENTIALS_OPTIONS getCredentialsOptions{
WEBAUTHN_GET_CREDENTIALS_OPTIONS_VERSION_1,
rpId.get(), // pwszRpId