Skip to content

Commit

Permalink
Bug 1365856 - fix double-checked-locking in secoid, r=ttaubert
Browse files Browse the repository at this point in the history
Differential Revision: https://nss-review.dev.mozaws.net/D376

--HG--
extra : rebase_source : d9a50edb534ea5e421b63129340cc1daa8180f86
extra : amend_source : 8c5ccfebbeec41a4eb0b0f3402c94b7e7eb4bb57
  • Loading branch information
franziskuskiefer committed Jul 27, 2017
1 parent 4197a07 commit 427961a
Showing 1 changed file with 8 additions and 12 deletions.
20 changes: 8 additions & 12 deletions lib/util/secoid.c
Expand Up @@ -1841,13 +1841,11 @@ secoid_FindDynamic(const SECItem *key)
{
SECOidData *ret = NULL;

NSSRWLock_LockRead(dynOidLock);
if (dynOidHash) {
NSSRWLock_LockRead(dynOidLock);
if (dynOidHash) { /* must check it again with lock held. */
ret = (SECOidData *)PL_HashTableLookup(dynOidHash, key);
}
NSSRWLock_UnlockRead(dynOidLock);
ret = (SECOidData *)PL_HashTableLookup(dynOidHash, key);
}
NSSRWLock_UnlockRead(dynOidLock);
if (ret == NULL) {
PORT_SetError(SEC_ERROR_UNRECOGNIZED_OID);
}
Expand All @@ -1866,14 +1864,12 @@ secoid_FindDynamicByTag(SECOidTag tagnum)
}
tagNumDiff = tagnum - SEC_OID_TOTAL;

if (dynOidTable) {
NSSRWLock_LockRead(dynOidLock);
if (dynOidTable != NULL && /* must check it again with lock held. */
tagNumDiff < dynOidEntriesUsed) {
dxo = dynOidTable[tagNumDiff];
}
NSSRWLock_UnlockRead(dynOidLock);
NSSRWLock_LockRead(dynOidLock);
if (dynOidTable != NULL &&
tagNumDiff < dynOidEntriesUsed) {
dxo = dynOidTable[tagNumDiff];
}
NSSRWLock_UnlockRead(dynOidLock);
if (dxo == NULL) {
PORT_SetError(SEC_ERROR_UNRECOGNIZED_OID);
}
Expand Down

0 comments on commit 427961a

Please sign in to comment.