diff options
author | Miloslav Trmač <mitr@redhat.com> | 2010-07-13 21:41:52 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-19 09:30:04 +0200 |
commit | 725b85fe44a24350c64ae816da9eb3de7245006c (patch) | |
tree | 90a7c8e887bcf3dc617f665f48f99999a1affbe6 | |
parent | da056f403afb991d56654986f8cf605494126ed9 (diff) | |
download | cryptodev-linux-725b85fe44a24350c64ae816da9eb3de7245006c.tar.gz cryptodev-linux-725b85fe44a24350c64ae816da9eb3de7245006c.tar.xz cryptodev-linux-725b85fe44a24350c64ae816da9eb3de7245006c.zip |
Free all data referenced by a session, in all cases
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
-rw-r--r-- | ncr-sessions.c | 12 |
1 files 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; } |