From 3f252816ad80ca356d80dbc90ecfdaa4ed9b5942 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 13 Mar 2019 18:56:05 +0100 Subject: [PATCH] libcli:smb: Add smb2_signing_key_destructor() Signed-off-by: Andreas Schneider Reviewed-by: Andrew Bartlett --- libcli/smb/smb2_signing.c | 10 ++++++++++ libcli/smb/smb2_signing.h | 2 ++ libcli/smb/smbXcli_base.c | 6 ++++-- source3/smbd/smb2_sesssetup.c | 9 ++++++--- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/libcli/smb/smb2_signing.c b/libcli/smb/smb2_signing.c index c2a86b850e0..72c98d6a610 100644 --- a/libcli/smb/smb2_signing.c +++ b/libcli/smb/smb2_signing.c @@ -27,6 +27,16 @@ #include #include +int smb2_signing_key_destructor(struct smb2_signing_key *key) +{ + if (key->hmac_hnd != NULL) { + gnutls_hmac_deinit(key->hmac_hnd, NULL); + key->hmac_hnd = NULL; + } + + return 0; +} + bool smb2_signing_key_valid(const struct smb2_signing_key *key) { if (key == NULL) { diff --git a/libcli/smb/smb2_signing.h b/libcli/smb/smb2_signing.h index 668e48ae124..73621daf90e 100644 --- a/libcli/smb/smb2_signing.h +++ b/libcli/smb/smb2_signing.h @@ -31,6 +31,8 @@ struct smb2_signing_key { DATA_BLOB blob; }; +int smb2_signing_key_destructor(struct smb2_signing_key *key); + bool smb2_signing_key_valid(const struct smb2_signing_key *key); NTSTATUS smb2_signing_sign_pdu(DATA_BLOB signing_key, diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index 793c9870df0..7261609c967 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -5964,7 +5964,8 @@ NTSTATUS smb2cli_session_set_session_key(struct smbXcli_session *session, ZERO_STRUCT(session_key); return NT_STATUS_NO_MEMORY; } - /* TODO: setup destructor once we cache the hmac handle */ + talloc_set_destructor(session->smb2->signing_key, + smb2_signing_key_destructor); session->smb2->signing_key->blob = data_blob_talloc(session->smb2->signing_key, @@ -6041,7 +6042,8 @@ NTSTATUS smb2cli_session_set_session_key(struct smbXcli_session *session, if (session->smb2_channel.signing_key == NULL) { return NT_STATUS_NO_MEMORY; } - /* TODO: setup destructor once we cache the hmac handle */ + talloc_set_destructor(session->smb2_channel.signing_key, + smb2_signing_key_destructor); session->smb2_channel.signing_key->blob = data_blob_dup_talloc(session->smb2_channel.signing_key, diff --git a/source3/smbd/smb2_sesssetup.c b/source3/smbd/smb2_sesssetup.c index a395774c320..97bf0e0245f 100644 --- a/source3/smbd/smb2_sesssetup.c +++ b/source3/smbd/smb2_sesssetup.c @@ -329,7 +329,8 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session, ZERO_STRUCT(session_key); return NT_STATUS_NO_MEMORY; } - /* TODO: setup destructor once we cache the hmac handle */ + talloc_set_destructor(x->global->signing_key, + smb2_signing_key_destructor); x->global->signing_key->blob = x->global->signing_key_blob = @@ -459,7 +460,8 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session, if (x->global->channels[0].signing_key == NULL) { return NT_STATUS_NO_MEMORY; } - /* TODO: setup destructor once we cache the hmac handle */ + talloc_set_destructor(x->global->channels[0].signing_key, + smb2_signing_key_destructor); x->global->channels[0].signing_key->blob = x->global->channels[0].signing_key_blob = @@ -700,7 +702,8 @@ static NTSTATUS smbd_smb2_bind_auth_return(struct smbXsrv_session *session, ZERO_STRUCT(session_key); return NT_STATUS_NO_MEMORY; } - /* TODO: setup destructor once we cache the hmac handle */ + talloc_set_destructor(c->signing_key, + smb2_signing_key_destructor); c->signing_key->blob = c->signing_key_blob = -- 2.47.3