From 40ff0e4ede64b28a060b97fe79c3aad06fb0296b Mon Sep 17 00:00:00 2001 From: Viktor Tarasov Date: Tue, 2 Oct 2012 09:26:35 +0200 Subject: [PATCH] pkcs11: Fixed SIGV when deleting public key objects via PKCS#11 Thanks to Andreas Schwier. --- src/pkcs11/framework-pkcs15.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pkcs11/framework-pkcs15.c b/src/pkcs11/framework-pkcs15.c index e78f51fe..57614d84 100644 --- a/src/pkcs11/framework-pkcs15.c +++ b/src/pkcs11/framework-pkcs15.c @@ -2731,7 +2731,7 @@ pkcs15_any_destroy(struct sc_pkcs11_session *session, void *object) if(slot->app_info) aid = &slot->app_info->aid; rv = sc_pkcs15init_finalize_profile(p11card->card, profile, aid); - if (rv != CKR_OK) { + if (rv) { sc_log(context, "Cannot finalize profile: %i", rv); return sc_to_cryptoki_error(rv, "C_DestroyObject"); } @@ -2756,8 +2756,9 @@ pkcs15_any_destroy(struct sc_pkcs11_session *session, void *object) } } - /* Delete object in smartcard */ - rv = sc_pkcs15init_delete_object(fw_data->p15_card, profile, obj->base.p15_object); + /* Delete object in smartcard (if corresponding PKCS#15 object exists) */ + if (obj->base.p15_object) + rv = sc_pkcs15init_delete_object(fw_data->p15_card, profile, obj->base.p15_object); if (rv >= 0) { /* Oppose to pkcs15_add_object */ --any_obj->refcount; /* correct refcont */