diff options
author | John M. Schanck <jschanck@mozilla.com> | 2022-05-19 16:55:11 +0000 |
---|---|---|
committer | John M. Schanck <jschanck@mozilla.com> | 2022-05-19 16:55:11 +0000 |
commit | 613dfcd5a78da8c2756b1d6af298544d1955dc10 (patch) | |
tree | cb1130c891ab23fc35958d4bfc9134fd62f12262 | |
parent | d4a3a6f7e7a163cae9b409851c80f5ee397094b8 (diff) | |
download | nss-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.c | 16 |
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; + } } } |