From 725b85fe44a24350c64ae816da9eb3de7245006c Mon Sep 17 00:00:00 2001 From: Miloslav Trmač Date: Tue, 13 Jul 2010 21:41:52 +0200 Subject: Free all data referenced by a session, in all cases Signed-off-by: Nikos Mavrogiannopoulos --- ncr-sessions.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ncr-sessions.c b/ncr-sessions.c index bb9e366..6648ec8 100644 --- a/ncr-sessions.c +++ b/ncr-sessions.c @@ -79,6 +79,11 @@ struct session_item_st* item; void _ncr_sessions_item_put( struct session_item_st* item) { if (atomic_dec_and_test(&item->refcnt)) { + cryptodev_cipher_deinit(&item->cipher); + ncr_pk_cipher_deinit(&item->pk); + cryptodev_hash_deinit(&item->hash); + if (item->key) + _ncr_key_item_put(item->key); kfree(item); } } @@ -437,12 +442,6 @@ static int _ncr_session_init(struct ncr_lists* lists, struct ncr_session_st* ses fail: if (ret < 0) { - if (ns->key) _ncr_key_item_put(ns->key); - ns->key = NULL; - - ncr_pk_cipher_deinit(&ns->pk); - cryptodev_cipher_deinit(&ns->cipher); - cryptodev_hash_deinit(&ns->hash); _ncr_session_remove(&lists->sessions, ns->desc); } @@ -638,7 +637,6 @@ static void _ncr_session_remove(struct list_sem_st* lst, ncr_session_t desc) list_for_each_entry_safe(item, tmp, &lst->list, list) { if(item->desc == desc) { list_del(&item->list); - if (item->key) _ncr_key_item_put(item->key); _ncr_sessions_item_put( item); /* decrement ref count */ break; } -- cgit