From 94f0842f8b3113faf6ca6ac5239da2b07e864bcf Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Sat, 23 May 2020 04:56:53 +0200 Subject: packet-kerberos: split out kerberos_new_private_data() This way we can avoid zero_private on the stack. Change-Id: Iea7ed7e1cd6d0616b0e72aeff489549efd13e4f4 Signed-off-by: Stefan Metzmacher Reviewed-on: https://code.wireshark.org/review/37291 Reviewed-by: Anders Broman --- .../asn1/kerberos/packet-kerberos-template.c | 27 +++++++++++++----- epan/dissectors/packet-kerberos.c | 33 +++++++++++++++------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/epan/dissectors/asn1/kerberos/packet-kerberos-template.c b/epan/dissectors/asn1/kerberos/packet-kerberos-template.c index 089a14a9f7..80ed26c0cc 100644 --- a/epan/dissectors/asn1/kerberos/packet-kerberos-template.c +++ b/epan/dissectors/asn1/kerberos/packet-kerberos-template.c @@ -267,11 +267,24 @@ call_kerberos_callbacks(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int return; } +static kerberos_private_data_t* +kerberos_new_private_data(void) +{ + kerberos_private_data_t *p; + + p = wmem_new0(wmem_packet_scope(), kerberos_private_data_t); + if (p == NULL) { + return NULL; + } + + return p; +} + static kerberos_private_data_t* kerberos_get_private_data(asn1_ctx_t *actx) { if (!actx->private_data) { - actx->private_data = wmem_new0(wmem_packet_scope(), kerberos_private_data_t); + actx->private_data = kerberos_new_private_data(); } return (kerberos_private_data_t *)(actx->private_data); } @@ -992,8 +1005,8 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, int keytype, int *datalen) { - kerberos_private_data_t zero_private = { .msg_type = 0, }; - return decrypt_krb5_data_private(tree, pinfo, &zero_private, + kerberos_private_data_t *zero_private = kerberos_new_private_data(); + return decrypt_krb5_data_private(tree, pinfo, zero_private, usage, cryptotvb, keytype, datalen); } @@ -1142,7 +1155,7 @@ decrypt_krb5_krb_cfx_dce(proto_tree *tree, tvbuff_t *checksum_tvb) { struct decrypt_krb5_krb_cfx_dce_state state; - kerberos_private_data_t zero_private = { .msg_type = 0, }; + kerberos_private_data_t *zero_private = kerberos_new_private_data(); tvbuff_t *gssapi_decrypted_tvb = NULL; krb5_error_code ret; @@ -1196,7 +1209,7 @@ decrypt_krb5_krb_cfx_dce(proto_tree *tree, ret = decrypt_krb5_with_cb(tree, pinfo, - &zero_private, + zero_private, usage, keytype, gssapi_encrypted_tvb, @@ -1462,7 +1475,7 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, int keytype, int *datalen) { - kerberos_private_data_t zero_private = { .msg_type = 0, }; + kerberos_private_data_t *zero_private = kerberos_new_private_data(); krb5_error_code ret; krb5_data data; enc_key_t *ek; @@ -1513,7 +1526,7 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, if((ret == 0) && (length>0)){ char *user_data; - used_encryption_key(tree, pinfo, &zero_private, + used_encryption_key(tree, pinfo, zero_private, ek, usage, cryptotvb); krb5_crypto_destroy(krb5_ctx, crypto); diff --git a/epan/dissectors/packet-kerberos.c b/epan/dissectors/packet-kerberos.c index 3354dcb91c..4420bb7023 100644 --- a/epan/dissectors/packet-kerberos.c +++ b/epan/dissectors/packet-kerberos.c @@ -676,11 +676,24 @@ call_kerberos_callbacks(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int return; } +static kerberos_private_data_t* +kerberos_new_private_data(void) +{ + kerberos_private_data_t *p; + + p = wmem_new0(wmem_packet_scope(), kerberos_private_data_t); + if (p == NULL) { + return NULL; + } + + return p; +} + static kerberos_private_data_t* kerberos_get_private_data(asn1_ctx_t *actx) { if (!actx->private_data) { - actx->private_data = wmem_new0(wmem_packet_scope(), kerberos_private_data_t); + actx->private_data = kerberos_new_private_data(); } return (kerberos_private_data_t *)(actx->private_data); } @@ -1401,8 +1414,8 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, int keytype, int *datalen) { - kerberos_private_data_t zero_private = { .msg_type = 0, }; - return decrypt_krb5_data_private(tree, pinfo, &zero_private, + kerberos_private_data_t *zero_private = kerberos_new_private_data(); + return decrypt_krb5_data_private(tree, pinfo, zero_private, usage, cryptotvb, keytype, datalen); } @@ -1551,7 +1564,7 @@ decrypt_krb5_krb_cfx_dce(proto_tree *tree, tvbuff_t *checksum_tvb) { struct decrypt_krb5_krb_cfx_dce_state state; - kerberos_private_data_t zero_private = { .msg_type = 0, }; + kerberos_private_data_t *zero_private = kerberos_new_private_data(); tvbuff_t *gssapi_decrypted_tvb = NULL; krb5_error_code ret; @@ -1605,7 +1618,7 @@ decrypt_krb5_krb_cfx_dce(proto_tree *tree, ret = decrypt_krb5_with_cb(tree, pinfo, - &zero_private, + zero_private, usage, keytype, gssapi_encrypted_tvb, @@ -1871,7 +1884,7 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, int keytype, int *datalen) { - kerberos_private_data_t zero_private = { .msg_type = 0, }; + kerberos_private_data_t *zero_private = kerberos_new_private_data(); krb5_error_code ret; krb5_data data; enc_key_t *ek; @@ -1922,7 +1935,7 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo, if((ret == 0) && (length>0)){ char *user_data; - used_encryption_key(tree, pinfo, &zero_private, + used_encryption_key(tree, pinfo, zero_private, ek, usage, cryptotvb); krb5_crypto_destroy(krb5_ctx, crypto); @@ -6086,7 +6099,7 @@ dissect_kerberos_EncryptedChallenge(gboolean implicit_tag _U_, tvbuff_t *tvb _U_ /*--- End of included file: packet-kerberos-fn.c ---*/ -#line 3026 "./asn1/kerberos/packet-kerberos-template.c" +#line 3039 "./asn1/kerberos/packet-kerberos-template.c" #ifdef HAVE_KERBEROS static const ber_sequence_t PA_ENC_TS_ENC_sequence[] = { @@ -7404,7 +7417,7 @@ void proto_register_kerberos(void) { NULL, HFILL }}, /*--- End of included file: packet-kerberos-hfarr.c ---*/ -#line 3499 "./asn1/kerberos/packet-kerberos-template.c" +#line 3512 "./asn1/kerberos/packet-kerberos-template.c" }; /* List of subtrees */ @@ -7503,7 +7516,7 @@ void proto_register_kerberos(void) { &ett_kerberos_KrbFastArmoredRep, /*--- End of included file: packet-kerberos-ettarr.c ---*/ -#line 3522 "./asn1/kerberos/packet-kerberos-template.c" +#line 3535 "./asn1/kerberos/packet-kerberos-template.c" }; static ei_register_info ei[] = { -- cgit v1.2.3