summaryrefslogtreecommitdiff
path: root/lib/dev
diff options
context:
space:
mode:
authorJohn M. Schanck <jschanck@mozilla.com>2022-02-23 18:00:28 +0000
committerJohn M. Schanck <jschanck@mozilla.com>2022-02-23 18:00:28 +0000
commit50f462563bee7be5b6ac6835ae052ecbd9eeef8b (patch)
treea76ffd92c877e64ccd5dbc9e762f7a6a91d7d855 /lib/dev
parent2c4b67fb3e56f2f37425423622415cc287ccb5e3 (diff)
downloadnss-hg-50f462563bee7be5b6ac6835ae052ecbd9eeef8b.tar.gz
Bug 1370866 - Check return value of PK11Slot_GetNSSToken. r=djackson
Differential Revision: https://phabricator.services.mozilla.com/D139420
Diffstat (limited to 'lib/dev')
-rw-r--r--lib/dev/devtoken.c13
-rw-r--r--lib/dev/devutil.c18
2 files changed, 10 insertions, 21 deletions
diff --git a/lib/dev/devtoken.c b/lib/dev/devtoken.c
index fedc44b4b..a7dbffc1a 100644
--- a/lib/dev/devtoken.c
+++ b/lib/dev/devtoken.c
@@ -53,13 +53,6 @@ nssToken_Remove(
nssTokenObjectCache_Clear(tok->cache);
}
-NSS_IMPLEMENT void
-NSSToken_Destroy(
- NSSToken *tok)
-{
- (void)nssToken_Destroy(tok);
-}
-
NSS_IMPLEMENT NSSToken *
nssToken_AddRef(
NSSToken *tok)
@@ -996,8 +989,9 @@ sha1_hash(NSSItem *input, NSSItem *output)
NSSToken *token = PK11Slot_GetNSSToken(internal);
ap = NSSAlgorithmAndParameters_CreateSHA1Digest(NULL);
(void)nssToken_Digest(token, NULL, ap, input, output, NULL);
- PK11_FreeSlot(token->pk11slot);
nss_ZFreeIf(ap);
+ (void)nssToken_Destroy(token);
+ PK11_FreeSlot(internal);
}
static void
@@ -1008,8 +1002,9 @@ md5_hash(NSSItem *input, NSSItem *output)
NSSToken *token = PK11Slot_GetNSSToken(internal);
ap = NSSAlgorithmAndParameters_CreateMD5Digest(NULL);
(void)nssToken_Digest(token, NULL, ap, input, output, NULL);
- PK11_FreeSlot(token->pk11slot);
nss_ZFreeIf(ap);
+ (void)nssToken_Destroy(token);
+ PK11_FreeSlot(internal);
}
static CK_TRUST
diff --git a/lib/dev/devutil.c b/lib/dev/devutil.c
index 7c30a0da2..302a6b562 100644
--- a/lib/dev/devutil.c
+++ b/lib/dev/devutil.c
@@ -56,7 +56,7 @@ nssCryptokiObject_Destroy(
nssCryptokiObject *object)
{
if (object) {
- nssToken_Destroy(object->token);
+ (void)nssToken_Destroy(object->token);
nss_ZFreeIf(object->label);
nss_ZFreeIf(object);
}
@@ -150,20 +150,13 @@ nssTokenArray_Destroy(
if (tokens) {
NSSToken **tokenp;
for (tokenp = tokens; *tokenp; tokenp++) {
- nssToken_Destroy(*tokenp);
+ (void)nssToken_Destroy(*tokenp);
}
nss_ZFreeIf(tokens);
}
}
NSS_IMPLEMENT void
-NSSTokenArray_Destroy(
- NSSToken **tokens)
-{
- nssTokenArray_Destroy(tokens);
-}
-
-NSS_IMPLEMENT void
nssCryptokiObjectArray_Destroy(
nssCryptokiObject **objects)
{
@@ -365,7 +358,7 @@ create_object(
/* The cache is tied to the token, and therefore the objects
* in it should not hold references to the token.
*/
- nssToken_Destroy(object->token);
+ (void)nssToken_Destroy(object->token);
rvCachedObject->object = object;
rvCachedObject->attributes = nss_ZNEWARRAY(arena, CK_ATTRIBUTE, numTypes);
if (!rvCachedObject->attributes) {
@@ -568,7 +561,7 @@ get_token_objects_for_cache(
&numObjects,
&status);
if (status != PR_SUCCESS) {
- nss_ZFreeIf(objects);
+ nssCryptokiObjectArray_Destroy(objects);
return status;
}
for (i = 0; i < numObjects; i++) {
@@ -584,7 +577,8 @@ get_token_objects_for_cache(
} else {
PRUint32 j;
for (j = 0; j < i; j++) {
- /* sigh */
+ /* Any token references that were removed in successful loop iterations
+ * need to be restored before we call nssCryptokiObjectArray_Destroy */
nssToken_AddRef(cache->objects[objectType][j]->object->token);
nssArena_Destroy(cache->objects[objectType][j]->arena);
}