summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ.C. Jones <jjones@mozilla.com>2020-08-29 13:04:08 +0000
committerMoonchild <moonchild@palemoon.org>2020-08-30 11:59:06 +0000
commit71ac56ba408bc8819ae6a7d07826f3cfa13a082b (patch)
treef9b1261d844e6aa633e83ce33ba0f48e7f81dfc4
parentae184d09e6229025177e4d537ab13b32d6023a82 (diff)
downloadUXP-71ac56ba408bc8819ae6a7d07826f3cfa13a082b.tar
UXP-71ac56ba408bc8819ae6a7d07826f3cfa13a082b.tar.gz
UXP-71ac56ba408bc8819ae6a7d07826f3cfa13a082b.tar.lz
UXP-71ac56ba408bc8819ae6a7d07826f3cfa13a082b.tar.xz
UXP-71ac56ba408bc8819ae6a7d07826f3cfa13a082b.zip
[NSS] Prevent slotLock race in NSC_GetTokenInfo
Basically, NSC_GetTokenInfo doesn't lock slot->slotLock before accessing slot after obtaining it, even though slotLock is defined as its lock.
-rw-r--r--security/nss/lib/softoken/pkcs11.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/security/nss/lib/softoken/pkcs11.c b/security/nss/lib/softoken/pkcs11.c
index 6c535cf77..116a34890 100644
--- a/security/nss/lib/softoken/pkcs11.c
+++ b/security/nss/lib/softoken/pkcs11.c
@@ -3511,10 +3511,12 @@ NSC_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
PORT_Memcpy(pInfo->model, "NSS 3 ", 16);
PORT_Memcpy(pInfo->serialNumber, "0000000000000000", 16);
PORT_Memcpy(pInfo->utcTime, "0000000000000000", 16);
- pInfo->ulMaxSessionCount = 0; /* arbitrarily large */
+ pInfo->ulMaxSessionCount = 0; /* arbitrarily large */
+ pInfo->ulMaxRwSessionCount = 0; /* arbitrarily large */
+ PZ_Lock(slot->slotLock); /* Protect sessionCount / rwSessioncount */
pInfo->ulSessionCount = slot->sessionCount;
- pInfo->ulMaxRwSessionCount = 0; /* arbitarily large */
pInfo->ulRwSessionCount = slot->rwSessionCount;
+ PZ_Unlock(slot->slotLock); /* Unlock before sftk_getKeyDB */
pInfo->firmwareVersion.major = 0;
pInfo->firmwareVersion.minor = 0;
PORT_Memcpy(pInfo->label, slot->tokDescription, sizeof(pInfo->label));