summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn M. Schanck <jschanck@mozilla.com>2022-05-19 16:55:11 +0000
committerJohn M. Schanck <jschanck@mozilla.com>2022-05-19 16:55:11 +0000
commit613dfcd5a78da8c2756b1d6af298544d1955dc10 (patch)
treecb1130c891ab23fc35958d4bfc9134fd62f12262
parentd4a3a6f7e7a163cae9b409851c80f5ee397094b8 (diff)
downloadnss-hg-613dfcd5a78da8c2756b1d6af298544d1955dc10.tar.gz
Bug 1766978 - improve error handling after nssCKFWInstance_CreateObjectHandle. r=djacksonNSS_3_79_BETA1
Differential Revision: https://phabricator.services.mozilla.com/D146765
-rw-r--r--lib/ckfw/wrap.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/ckfw/wrap.c b/lib/ckfw/wrap.c
index 44c2e8e5b..624d9cee3 100644
--- a/lib/ckfw/wrap.c
+++ b/lib/ckfw/wrap.c
@@ -2570,11 +2570,17 @@ NSSCKFWC_FindObjects(
phObject[i] = nssCKFWInstance_FindObjectHandle(fwInstance, fwObject);
if ((CK_OBJECT_HANDLE)0 == phObject[i]) {
phObject[i] = nssCKFWInstance_CreateObjectHandle(fwInstance, fwObject, &error);
- }
- if ((CK_OBJECT_HANDLE)0 == phObject[i]) {
- /* This isn't right either, is it? */
- nssCKFWObject_Destroy(fwObject);
- goto loser;
+ /* CreateObjectHandle returns CKR_GENERAL_ERROR if fwObject already
+ * has a handle. This happens when another thread creates a handle
+ * between our FindObjectHandle and CreateObjectHandle calls.
+ */
+ if (error == CKR_GENERAL_ERROR) {
+ error = CKR_OK;
+ phObject[i] = nssCKFWInstance_FindObjectHandle(fwInstance, fwObject);
+ }
+ if (error != CKR_OK || (CK_OBJECT_HANDLE)0 == phObject[i]) {
+ goto loser;
+ }
}
}