@@ -763,7 +763,8 @@ static void wp11_Session_Final(WP11_Session* session)
763763 if (session -> inUse ) {
764764 /* Free objects in session. */
765765 while ((obj = session -> object ) != NULL ) {
766- WP11_Session_RemoveObject (session , obj );
766+ /* ignore return value, logged in function */
767+ (void )WP11_Session_RemoveObject (session , obj );
767768 WP11_Object_Free (obj );
768769 }
769770 session -> inUse = 0 ;
@@ -4260,7 +4261,7 @@ static int wp11_Object_Unstore(WP11_Object* object, int tokenId, int objId)
42604261 return BAD_FUNC_ARG ;
42614262 }
42624263
4263- /* Remove store and key object */
4264+ /* Remove store object */
42644265 ret = wp11_storage_remove (WOLFPKCS11_STORE_OBJECT , tokenId , objId );
42654266 if (ret != 0 ) {
42664267 return ret ;
@@ -4310,6 +4311,7 @@ static int wp11_Object_Unstore(WP11_Object* object, int tokenId, int objId)
43104311 break ;
43114312 }
43124313 }
4314+ /* remove actual object by type */
43134315 return wp11_storage_remove (storeObjType , tokenId , objId );
43144316}
43154317#endif /* !WOLFPKCS11_NO_STORE */
@@ -6521,12 +6523,16 @@ int WP11_Session_AddObject(WP11_Session* session, int onToken,
65216523 *
65226524 * @param session [in] Session object.
65236525 * @param object [in] Key Object object.
6526+ * @return -ve on failure.
6527+ * 0 on success.
65246528 */
6525- void WP11_Session_RemoveObject (WP11_Session * session , WP11_Object * object )
6529+ int WP11_Session_RemoveObject (WP11_Session * session , WP11_Object * object )
65266530{
6531+ int ret = 0 ;
65276532 WP11_Object * * curr ;
65286533 WP11_Token * token ;
65296534 int id ;
6535+
65306536#ifdef WOLFPKCS11_NSS
65316537 if (object -> session && (session != object -> session ))
65326538 session = object -> session ;
@@ -6549,34 +6555,55 @@ void WP11_Session_RemoveObject(WP11_Session* session, WP11_Object* object)
65496555 WP11_Lock_LockRW (& session -> slot -> token .lock );
65506556 }
65516557
6558+ /* walk list to get id for object to remove */
65526559 while (* curr != NULL ) {
65536560 if (* curr == object ) {
65546561 * curr = object -> next ;
65556562 break ;
65566563 }
6564+
6565+ #ifndef WOLFPKCS11_NO_STORE
6566+ if (object -> onToken ) {
6567+ /* remove any id's with higher value */
6568+ ret = wp11_Object_Unstore (* curr , (int )session -> slotId , id );
6569+ #ifdef DEBUG_WOLFPKCS11
6570+ if (ret != 0 ) {
6571+ printf ("Failed to unstore slot %d, id: %d, ret: %d, continuing...\n" ,
6572+ (int )session -> slotId , id , ret );
6573+ }
6574+ #endif
6575+ }
6576+ #endif
6577+
65576578 curr = & (* curr )-> next ;
65586579 /* Id of next object as it isn't the one being removed. */
65596580 id -- ;
65606581 }
6582+
65616583 if (object -> onToken ) {
65626584#ifndef WOLFPKCS11_NO_STORE
6563- int ret = wp11_Object_Unstore (object , (int )session -> slotId , id );
6564- if (ret == 0 ) {
6565- ret = wp11_Slot_Store (session -> slot , (int )session -> slotId );
6585+ ret = wp11_Object_Unstore (object , (int )session -> slotId , id );
6586+ #ifdef DEBUG_WOLFPKCS11
6587+ if (ret != 0 ) {
6588+ printf ("Failed to unstore slot %d, id: %d, ret: %d\n" ,
6589+ (int )session -> slotId , id , ret );
65666590 }
6591+ #endif
6592+ /* re-store the token */
6593+ ret = wp11_Slot_Store (session -> slot , (int )session -> slotId );
65676594 #ifdef DEBUG_WOLFPKCS11
65686595 if (ret != 0 ) {
6569- printf ("Failed to unstore slot %d, ret: %d\n" ,
6596+ printf ("Failed to store slot %d, ret: %d\n" ,
65706597 (int )session -> slotId , ret );
65716598 }
65726599 #endif
6573- (void )ret ; /* store failure cannot be returned, so log and ignore */
65746600#endif
65756601 WP11_Lock_UnlockRW (object -> lock );
65766602 }
65776603 else {
65786604 WP11_Lock_UnlockRW (& session -> slot -> token .lock );
65796605 }
6606+ return ret ;
65806607}
65816608
65826609/**
0 commit comments