From 1101925f576181e615f53ca32e5ddfcb8a860e88 Mon Sep 17 00:00:00 2001 From: Jakub Zelenka Date: Wed, 23 Apr 2025 18:34:33 +0200 Subject: [PATCH] Skip caching key with zero object handle It might happen that the object with zero object handle gets to cache_key which then result in unnecessary failure when caching the key. This skips the key caching if the object handle is 0. --- src/objects.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/objects.c b/src/objects.c index fdccfd8b..9d9e841c 100644 --- a/src/objects.c +++ b/src/objects.c @@ -362,6 +362,7 @@ static void cache_key(P11PROV_OBJ *obj) CK_BBOOL val_false = CK_FALSE; CK_ATTRIBUTE template[] = { { CKA_TOKEN, &val_false, sizeof(val_false) } }; CK_SESSION_HANDLE sess; + CK_OBJECT_HANDLE obj_handle; CK_BBOOL can_cache = CK_TRUE; CK_RV ret; int cache_keys; @@ -388,6 +389,12 @@ static void cache_key(P11PROV_OBJ *obj) return; } + obj_handle = p11prov_obj_get_handle(obj); + if (obj_handle == 0) { + P11PROV_debug("Skip caching key with zero object handle"); + return; + } + ret = p11prov_take_login_session(obj->ctx, obj->slotid, &session); if (ret != CKR_OK || session == NULL) { P11PROV_debug("Failed to get login session. Error %lx", ret); @@ -398,8 +405,8 @@ static void cache_key(P11PROV_OBJ *obj) destroy_key_cache(obj, session); sess = p11prov_session_handle(session); - ret = p11prov_CopyObject(obj->ctx, sess, p11prov_obj_get_handle(obj), - template, 1, &obj->cached); + ret = p11prov_CopyObject(obj->ctx, sess, obj_handle, template, 1, + &obj->cached); if (ret != CKR_OK) { P11PROV_raise(obj->ctx, ret, "Failed to cache key"); if (ret == CKR_FUNCTION_NOT_SUPPORTED) {