Skip to content

Commit

Permalink
Fix memory leaks when tokens are missing
Browse files Browse the repository at this point in the history
In case we have slots advertized but the driver fails to return
information or the token is not present we were leaking memory as the
slot is not added to the array and the number of slots is not
incremented.

Ensure the slot struct is freed in this case.
And ensure the slot is assigned and count incremented at the same time
to avoid leaks from other error conditions.

Signed-off-by: Simo Sorce <[email protected]>
  • Loading branch information
simo5 committed Nov 7, 2024
1 parent e064032 commit e6f0ec7
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions src/slot.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,19 +182,23 @@ CK_RV p11prov_init_slots(P11PROV_CTX *ctx, P11PROV_SLOTS_CTX **slots)
ret = CKR_HOST_MEMORY;
goto done;
}
sctx->slots[sctx->num] = slot;

ret = p11prov_GetSlotInfo(ctx, slotid[i], &slot->slot);
if (ret != CKR_OK || (slot->slot.flags & CKF_TOKEN_PRESENT) == 0) {
/* skip slot */
OPENSSL_free(slot);
continue;
}
ret = p11prov_GetTokenInfo(ctx, slotid[i], &slot->token);
if (ret) {
/* skip slot */
OPENSSL_free(slot);
continue;
}

sctx->slots[sctx->num] = slot;
sctx->num++;

trim(slot->slot.slotDescription);
trim(slot->slot.manufacturerID);
trim(slot->token.label);
Expand Down Expand Up @@ -243,8 +247,6 @@ CK_RV p11prov_init_slots(P11PROV_CTX *ctx, P11PROV_SLOTS_CTX **slots)

P11PROV_debug_slot(ctx, slot->id, &slot->slot, &slot->token,
slot->mechs, slot->nmechs, slot->profiles);

sctx->num++;
}

done:
Expand Down Expand Up @@ -348,9 +350,6 @@ void p11prov_free_slots(P11PROV_SLOTS_CTX *sctx)
err);
return;
}
if (sctx->num == 0) {
return;
}
for (int i = 0; i < sctx->num; i++) {
p11prov_session_pool_free(sctx->slots[i]->pool);
p11prov_obj_pool_free(sctx->slots[i]->objects);
Expand Down

0 comments on commit e6f0ec7

Please sign in to comment.