summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2016-07-20 23:54:35 +0200
committerAnders Broman <a.broman58@gmail.com>2016-07-22 06:21:54 +0000
commit53de2c23783788d92dc17d3dccfdc8b65ab0bf74 (patch)
tree2395270e27575e7261eda4bc9118daed12b69f90
parentb2e4a7e21ce7ee8fee857ee71d51ad1ec13feb2e (diff)
downloadwireshark-53de2c23783788d92dc17d3dccfdc8b65ab0bf74.tar.gz
Convert more glib memory to wmem pinfo pool
Change-Id: I4cc23bc19a6bd8c6a8e0389eaf939dbb60fe0ca3 Reviewed-on: https://code.wireshark.org/review/16562 Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--epan/dissectors/asn1/cms/cms.cnf2
-rw-r--r--epan/dissectors/asn1/kerberos/packet-kerberos-template.c25
-rw-r--r--epan/dissectors/asn1/pkcs12/packet-pkcs12-template.c7
-rw-r--r--epan/dissectors/asn1/pkcs12/packet-pkcs12-template.h2
-rw-r--r--epan/dissectors/asn1/pkcs12/pkcs12.cnf2
-rw-r--r--epan/dissectors/asn1/snmp/packet-snmp-template.c32
-rw-r--r--epan/dissectors/asn1/snmp/packet-snmp-template.h2
-rw-r--r--epan/dissectors/asn1/snmp/snmp.cnf2
-rw-r--r--epan/dissectors/asn1/spnego/packet-spnego-template.c4
-rw-r--r--epan/dissectors/packet-cms.c2
-rw-r--r--epan/dissectors/packet-dcerpc-mapi.c10
-rw-r--r--epan/dissectors/packet-http.c3
-rw-r--r--epan/dissectors/packet-ieee80211.c9
-rw-r--r--epan/dissectors/packet-ipsec.c5
-rw-r--r--epan/dissectors/packet-kerberos.c31
-rw-r--r--epan/dissectors/packet-kink.c1
-rw-r--r--epan/dissectors/packet-lapd.c3
-rw-r--r--epan/dissectors/packet-pkcs12.c17
-rw-r--r--epan/dissectors/packet-pkcs12.h2
-rw-r--r--epan/dissectors/packet-sigcomp.c13
-rw-r--r--epan/dissectors/packet-snmp.c40
-rw-r--r--epan/dissectors/packet-snmp.h2
-rw-r--r--epan/dissectors/packet-spnego.c8
-rw-r--r--epan/dissectors/packet-tdmop.c3
-rw-r--r--epan/dissectors/pidl/mapi/request.cnf.c5
-rw-r--r--epan/dissectors/pidl/mapi/response.cnf.c5
-rw-r--r--plugins/irda/packet-sir.c3
27 files changed, 86 insertions, 154 deletions
diff --git a/epan/dissectors/asn1/cms/cms.cnf b/epan/dissectors/asn1/cms/cms.cnf
index 2f965acb28..dad1dfecef 100644
--- a/epan/dissectors/asn1/cms/cms.cnf
+++ b/epan/dissectors/asn1/cms/cms.cnf
@@ -194,7 +194,7 @@ RevocationInfoChoice/other otherRIC
item = actx->created_item;
- PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx, item);
+ PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx->pinfo, actx, item);
#.END
diff --git a/epan/dissectors/asn1/kerberos/packet-kerberos-template.c b/epan/dissectors/asn1/kerberos/packet-kerberos-template.c
index b97a1003c0..74e9b51006 100644
--- a/epan/dissectors/asn1/kerberos/packet-kerberos-template.c
+++ b/epan/dissectors/asn1/kerberos/packet-kerberos-template.c
@@ -388,7 +388,7 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
}
read_keytab_file_from_preferences();
- data.data = (char *)g_malloc(length);
+ data.data = (char *)wmem_alloc(pinfo->pool, length);
data.length = length;
for(ek=enc_key_list;ek;ek=ek->next){
@@ -414,7 +414,6 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
"Decrypted keytype %d in frame %u using %s",
ek->keytype, pinfo->num, ek->key_origin);
- /* return a private g_malloced blob to the caller */
user_data=data.data;
if (datalen) {
*datalen = data.length;
@@ -422,7 +421,6 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
return user_data;
}
}
- g_free(data.data);
return NULL;
}
@@ -553,12 +551,11 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
keys. So just give it a copy of the crypto data instead.
This has been seen for RC4-HMAC blobs.
*/
- cryptocopy = (guint8 *)g_memdup(cryptotext, length);
+ cryptocopy = (guint8 *)wmem_memdup(wmem_packet_scope(), cryptotext, length);
ret = krb5_decrypt_ivec(krb5_ctx, crypto, usage,
cryptocopy, length,
&data,
NULL);
- g_free(cryptocopy);
if((ret == 0) && (length>0)){
char *user_data;
@@ -567,8 +564,8 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
ek->keytype, pinfo->num, ek->key_origin);
krb5_crypto_destroy(krb5_ctx, crypto);
- /* return a private g_malloced blob to the caller */
- user_data = (char *)g_memdup(data.data, (guint)data.length);
+ /* return a private wmem_alloced blob to the caller */
+ user_data = (char *)wmem_memdup(pinfo->pool, data.data, (guint)data.length);
if (datalen) {
*datalen = (int)data.length;
}
@@ -719,7 +716,7 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
return NULL;
}
- decrypted_data = g_malloc(length);
+ decrypted_data = wmem_alloc(wmem_packet_scope(), length);
for(ske = service_key_list; ske != NULL; ske = g_slist_next(ske)){
gboolean do_continue = FALSE;
sk = (service_key_t *) ske->data;
@@ -764,20 +761,17 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
md5_finish(&md5s, digest);
if (tvb_memeql (encr_tvb, 8, digest, 16) == 0) {
- plaintext = g_malloc(data_len);
- tvb_memcpy(encr_tvb, plaintext, CONFOUNDER_PLUS_CHECKSUM, data_len);
+ plaintext = (guint8* )tvb_memdup(pinfo->pool, encr_tvb, CONFOUNDER_PLUS_CHECKSUM, data_len);
tvb_free(encr_tvb);
if (datalen) {
*datalen = data_len;
}
- g_free(decrypted_data);
return(plaintext);
}
tvb_free(encr_tvb);
}
- g_free(decrypted_data);
return NULL;
}
@@ -1348,7 +1342,6 @@ dissect_krb5_decrypt_ticket_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offse
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1385,7 +1378,6 @@ dissect_krb5_decrypt_authenticator_data (gboolean imp_tag _U_, tvbuff_t *tvb, in
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1427,7 +1419,6 @@ dissect_krb5_decrypt_KDC_REP_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offs
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1459,7 +1450,6 @@ dissect_krb5_decrypt_PA_ENC_TIMESTAMP (gboolean imp_tag _U_, tvbuff_t *tvb, int
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1490,7 +1480,6 @@ dissect_krb5_decrypt_AP_REP_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offse
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1521,7 +1510,6 @@ dissect_krb5_decrypt_PRIV_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offset,
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1552,7 +1540,6 @@ dissect_krb5_decrypt_CRED_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offset,
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
diff --git a/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.c b/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.c
index 18814039b2..bff6cee915 100644
--- a/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.c
+++ b/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.c
@@ -217,7 +217,7 @@ void PBE_reset_parameters(void)
salt = NULL;
}
-int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encrypted_tvb _U_, asn1_ctx_t *actx _U_, proto_item *item _U_)
+int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encrypted_tvb _U_, packet_info *pinfo _U_, asn1_ctx_t *actx _U_, proto_item *item _U_)
{
#ifdef HAVE_LIBGCRYPT
const char *encryption_algorithm;
@@ -307,7 +307,7 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
}
datalen = tvb_captured_length(encrypted_tvb);
- clear_data = (char *)g_malloc(datalen);
+ clear_data = (char *)wmem_alloc(pinfo->pool, datalen);
err = gcry_cipher_decrypt (cipher, clear_data, datalen, (char *)tvb_memdup(wmem_packet_scope(), encrypted_tvb, 0, datalen), datalen);
if (gcry_err_code (err)) {
@@ -315,7 +315,6 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
proto_item_append_text(item, " [Failed to decrypt with password preference]");
gcry_cipher_close (cipher);
- g_free(clear_data);
return FALSE;
}
@@ -348,7 +347,6 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
}
if(!decrypt_ok) {
- g_free(clear_data);
proto_item_append_text(item, " [Failed to decrypt with supplied password]");
return FALSE;
@@ -361,7 +359,6 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
/* OK - so now clear_data contains the decrypted data */
clear_tvb = tvb_new_child_real_data(encrypted_tvb,(const guint8 *)clear_data, datalen, datalen);
- tvb_set_free_cb(clear_tvb, g_free);
name = g_string_new("");
oidname = oid_resolved_from_string(wmem_packet_scope(), object_identifier_id_param);
diff --git a/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.h b/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.h
index 4183ca2721..99b8e3d07b 100644
--- a/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.h
+++ b/epan/dissectors/asn1/pkcs12/packet-pkcs12-template.h
@@ -25,7 +25,7 @@
#define PACKET_PKCS12_H
void PBE_reset_parameters(void);
-int PBE_decrypt_data(const char *object_identifier_id, tvbuff_t *encrypted_tvb, asn1_ctx_t *actx, proto_item *item);
+int PBE_decrypt_data(const char *object_identifier_id, tvbuff_t *encrypted_tvb, packet_info *pinfo, asn1_ctx_t *actx, proto_item *item);
#endif /* PACKET_PKCS12_H */
diff --git a/epan/dissectors/asn1/pkcs12/pkcs12.cnf b/epan/dissectors/asn1/pkcs12/pkcs12.cnf
index a1b576e5a8..06a50f12b6 100644
--- a/epan/dissectors/asn1/pkcs12/pkcs12.cnf
+++ b/epan/dissectors/asn1/pkcs12/pkcs12.cnf
@@ -148,7 +148,7 @@ PrivateKeyInfo
dissector_handle=create_dissector_handle(dissect_PrivateKeyInfo_PDU, proto_pkcs12);
dissector_change_string("ber.oid", object_identifier_id, dissector_handle);
- PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx, actx->created_item);
+ PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx->pinfo, actx, actx->created_item);
/* restore the original dissector */
dissector_reset_string("ber.oid", object_identifier_id);
diff --git a/epan/dissectors/asn1/snmp/packet-snmp-template.c b/epan/dissectors/asn1/snmp/packet-snmp-template.c
index 27008e9a52..5262f8bd13 100644
--- a/epan/dissectors/asn1/snmp/packet-snmp-template.c
+++ b/epan/dissectors/asn1/snmp/packet-snmp-template.c
@@ -101,10 +101,10 @@ void proto_reg_handoff_smux(void);
static gboolean snmp_usm_auth_md5(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
static gboolean snmp_usm_auth_sha1(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
-static tvbuff_t* snmp_usm_priv_des(snmp_usm_params_t*, tvbuff_t*, gchar const**);
-static tvbuff_t* snmp_usm_priv_aes128(snmp_usm_params_t*, tvbuff_t*, gchar const**);
-static tvbuff_t* snmp_usm_priv_aes192(snmp_usm_params_t*, tvbuff_t*, gchar const**);
-static tvbuff_t* snmp_usm_priv_aes256(snmp_usm_params_t*, tvbuff_t*, gchar const**);
+static tvbuff_t* snmp_usm_priv_des(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
+static tvbuff_t* snmp_usm_priv_aes128(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
+static tvbuff_t* snmp_usm_priv_aes192(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
+static tvbuff_t* snmp_usm_priv_aes256(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
static void snmp_usm_password_to_key_md5(const guint8 *password, guint passwordlen, const guint8 *engineID, guint engineLength, guint8 *key);
@@ -1655,7 +1655,7 @@ snmp_usm_auth_sha1(snmp_usm_params_t* p _U_, guint8** calc_auth_p, guint* calc_a
}
static tvbuff_t*
-snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error _U_)
+snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error _U_)
{
#ifdef HAVE_LIBGCRYPT
gcry_error_t err;
@@ -1698,7 +1698,7 @@ snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar c
cryptgrm = (guint8*)tvb_memdup(wmem_packet_scope(),encryptedData,0,-1);
- cleartext = (guint8*)g_malloc(cryptgrm_len);
+ cleartext = (guint8*)wmem_alloc(pinfo->pool, cryptgrm_len);
err = gcry_cipher_open(&hd, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_CBC, 0);
if (err != GPG_ERR_NO_ERROR) goto on_gcry_error;
@@ -1715,12 +1715,10 @@ snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar c
gcry_cipher_close(hd);
clear_tvb = tvb_new_child_real_data(encryptedData, cleartext, cryptgrm_len, cryptgrm_len);
- tvb_set_free_cb(clear_tvb, g_free);
return clear_tvb;
on_gcry_error:
- g_free(cleartext);
*error = (const gchar *)gpg_strerror(err);
if (hd) gcry_cipher_close(hd);
return NULL;
@@ -1732,7 +1730,7 @@ on_gcry_error:
#ifdef HAVE_LIBGCRYPT
static tvbuff_t*
-snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar const** error, int algo)
+snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, packet_info *pinfo, gchar const** error, int algo)
{
gcry_error_t err;
gcry_cipher_hd_t hd = NULL;
@@ -1770,7 +1768,7 @@ snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar co
}
cryptgrm = (guint8*)tvb_memdup(wmem_packet_scope(),encryptedData,0,-1);
- cleartext = (guint8*)g_malloc(cryptgrm_len);
+ cleartext = (guint8*)wmem_alloc(pinfo->pool, cryptgrm_len);
err = gcry_cipher_open(&hd, algo, GCRY_CIPHER_MODE_CFB, 0);
if (err != GPG_ERR_NO_ERROR) goto on_gcry_error;
@@ -1787,12 +1785,10 @@ snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar co
gcry_cipher_close(hd);
clear_tvb = tvb_new_child_real_data(encryptedData, cleartext, cryptgrm_len, cryptgrm_len);
- tvb_set_free_cb(clear_tvb, g_free);
return clear_tvb;
on_gcry_error:
- g_free(cleartext);
*error = (const gchar *)gpg_strerror(err);
if (hd) gcry_cipher_close(hd);
return NULL;
@@ -1800,10 +1796,10 @@ on_gcry_error:
#endif
static tvbuff_t*
-snmp_usm_priv_aes128(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error)
+snmp_usm_priv_aes128(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error)
{
#ifdef HAVE_LIBGCRYPT
- return snmp_usm_priv_aes_common(p, encryptedData, error, GCRY_CIPHER_AES);
+ return snmp_usm_priv_aes_common(p, encryptedData, pinfo, error, GCRY_CIPHER_AES);
#else
*error = "libgcrypt not present, cannot decrypt";
return NULL;
@@ -1811,10 +1807,10 @@ snmp_usm_priv_aes128(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gcha
}
static tvbuff_t*
-snmp_usm_priv_aes192(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error)
+snmp_usm_priv_aes192(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error)
{
#ifdef HAVE_LIBGCRYPT
- return snmp_usm_priv_aes_common(p, encryptedData, error, GCRY_CIPHER_AES192);
+ return snmp_usm_priv_aes_common(p, encryptedData, pinfo, error, GCRY_CIPHER_AES192);
#else
*error = "libgcrypt not present, cannot decrypt";
return NULL;
@@ -1822,10 +1818,10 @@ snmp_usm_priv_aes192(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gcha
}
static tvbuff_t*
-snmp_usm_priv_aes256(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error)
+snmp_usm_priv_aes256(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error)
{
#ifdef HAVE_LIBGCRYPT
- return snmp_usm_priv_aes_common(p, encryptedData, error, GCRY_CIPHER_AES256);
+ return snmp_usm_priv_aes_common(p, encryptedData, pinfo, error, GCRY_CIPHER_AES256);
#else
*error = "libgcrypt not present, cannot decrypt";
return NULL;
diff --git a/epan/dissectors/asn1/snmp/packet-snmp-template.h b/epan/dissectors/asn1/snmp/packet-snmp-template.h
index 7d6b746e7e..808b078406 100644
--- a/epan/dissectors/asn1/snmp/packet-snmp-template.h
+++ b/epan/dissectors/asn1/snmp/packet-snmp-template.h
@@ -32,7 +32,7 @@ typedef struct _snmp_ue_assoc_t snmp_ue_assoc_t;
typedef struct _snmp_usm_params_t snmp_usm_params_t;
typedef gboolean (*snmp_usm_authenticator_t)(snmp_usm_params_t*, guint8** calc_auth, guint* calc_auth_len, gchar const** error);
-typedef tvbuff_t* (*snmp_usm_decoder_t)(snmp_usm_params_t*, tvbuff_t* encryptedData, gchar const** error);
+typedef tvbuff_t* (*snmp_usm_decoder_t)(snmp_usm_params_t*, tvbuff_t* encryptedData, packet_info *pinfo, gchar const** error);
typedef void (*snmp_usm_password_to_key_t)(const guint8 *password, guint passwordlen, const guint8 *engineID, guint engineLength, guint8 *key);
typedef struct _snmp_usm_auth_model_t {
diff --git a/epan/dissectors/asn1/snmp/snmp.cnf b/epan/dissectors/asn1/snmp/snmp.cnf
index c1ed1575e6..ee9dba9326 100644
--- a/epan/dissectors/asn1/snmp/snmp.cnf
+++ b/epan/dissectors/asn1/snmp/snmp.cnf
@@ -129,7 +129,7 @@ gint pdu_type=-1;
const gchar* error = NULL;
proto_tree* encryptedpdu_tree = proto_item_add_subtree(%(ACTX)s->created_item,ett_encryptedPDU);
- tvbuff_t* cleartext_tvb = usm_p.user_assoc->user.privProtocol(&usm_p, crypt_tvb, &error );
+ tvbuff_t* cleartext_tvb = usm_p.user_assoc->user.privProtocol(&usm_p, crypt_tvb, actx->pinfo, &error );
if (! cleartext_tvb) {
proto_tree_add_expert_format(encryptedpdu_tree, actx->pinfo, &ei_snmp_failed_decrypted_data_pdu,
diff --git a/epan/dissectors/asn1/spnego/packet-spnego-template.c b/epan/dissectors/asn1/spnego/packet-spnego-template.c
index f2bc72eda8..6e3767c38d 100644
--- a/epan/dissectors/asn1/spnego/packet-spnego-template.c
+++ b/epan/dissectors/asn1/spnego/packet-spnego-template.c
@@ -716,15 +716,13 @@ decrypt_gssapi_krb_cfx_wrap(proto_tree *tree,
if (output) {
guint8 *outdata;
- outdata = (guint8 *)g_memdup(output, tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb));
- g_free(output);
+ outdata = (guint8 *)wmem_memdup(pinfo->pool, output, tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb));
gssapi_encrypt->gssapi_decrypted_tvb=tvb_new_child_real_data(gssapi_encrypt->gssapi_encrypted_tvb,
outdata,
tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb),
tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb));
add_new_data_source(pinfo, gssapi_encrypt->gssapi_decrypted_tvb, "Decrypted GSS-Krb5");
- tvb_set_free_cb(gssapi_encrypt->gssapi_decrypted_tvb, g_free);
}
}
diff --git a/epan/dissectors/packet-cms.c b/epan/dissectors/packet-cms.c
index 708e2edcc0..a7198ecdf0 100644
--- a/epan/dissectors/packet-cms.c
+++ b/epan/dissectors/packet-cms.c
@@ -1353,7 +1353,7 @@ dissect_cms_EncryptedContent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o
item = actx->created_item;
- PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx, item);
+ PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx->pinfo, actx, item);
return offset;
diff --git a/epan/dissectors/packet-dcerpc-mapi.c b/epan/dissectors/packet-dcerpc-mapi.c
index 3f742b476d..5a627becb9 100644
--- a/epan/dissectors/packet-dcerpc-mapi.c
+++ b/epan/dissectors/packet-dcerpc-mapi.c
@@ -4034,7 +4034,7 @@ mapi_dissect_element_EcDoRpc_request(tvbuff_t *tvb _U_, int offset _U_, packet_i
return offset;
}
static int
-mapi_dissect_element_EcDoRpc_request_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
+mapi_dissect_element_EcDoRpc_request_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
{
guint32 size;
int start_offset = offset;
@@ -4055,12 +4055,11 @@ mapi_dissect_element_EcDoRpc_request_(tvbuff_t *tvb _U_, int offset _U_, packet_
size = reported_len;
}
ptr = tvb_get_ptr(tvb, offset, size);
- decrypted_data = (guint8 *)g_malloc(size);
+ decrypted_data = (guint8 *)wmem_alloc(pinfo->pool, size);
for (i = 0; i < size; i++) {
decrypted_data[i] = ptr[i] ^ 0xA5;
}
decrypted_tvb = tvb_new_child_real_data(tvb, decrypted_data, size, reported_len);
- tvb_set_free_cb(decrypted_tvb, g_free);
add_new_data_source(pinfo, decrypted_tvb, "Decrypted MAPI");
tr = proto_tree_add_subtree(tree, decrypted_tvb, 0, size, ett_mapi_mapi_request, NULL, "Decrypted MAPI PDU");
pdu_len = tvb_get_letohs(decrypted_tvb, 0);
@@ -4236,7 +4235,7 @@ mapi_dissect_element_EcDoRpc_response(tvbuff_t *tvb _U_, int offset _U_, packet_
return offset;
}
static int
-mapi_dissect_element_EcDoRpc_response_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
+mapi_dissect_element_EcDoRpc_response_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
{
guint32 size;
int start_offset = offset;
@@ -4257,12 +4256,11 @@ mapi_dissect_element_EcDoRpc_response_(tvbuff_t *tvb _U_, int offset _U_, packet
size = reported_len;
}
ptr = tvb_get_ptr(tvb, offset, size);
- decrypted_data = (guint8 *)g_malloc(size);
+ decrypted_data = (guint8 *)wmem_alloc(pinfo->pool, size);
for (i = 0; i < size; i++) {
decrypted_data[i] = ptr[i] ^ 0xA5;
}
decrypted_tvb = tvb_new_child_real_data(tvb, decrypted_data, size, reported_len);
- tvb_set_free_cb(decrypted_tvb, g_free);
add_new_data_source(pinfo, decrypted_tvb, "Decrypted MAPI");
tr = proto_tree_add_subtree(tree, decrypted_tvb, 0, size, ett_mapi_mapi_response, NULL, "Decrypted MAPI PDU");
pdu_len = tvb_get_letohs(decrypted_tvb, 0);
diff --git a/epan/dissectors/packet-http.c b/epan/dissectors/packet-http.c
index aa12a0ce87..3095536350 100644
--- a/epan/dissectors/packet-http.c
+++ b/epan/dissectors/packet-http.c
@@ -1839,7 +1839,7 @@ chunked_encoding_dissector(tvbuff_t **tvb_ptr, packet_info *pinfo,
chunked_data_size += chunk_size;
- raw_data = g_malloc(chunked_data_size);
+ raw_data = wmem_alloc(pinfo->pool, chunked_data_size);
raw_len = 0;
if (new_tvb != NULL) {
@@ -1857,7 +1857,6 @@ chunked_encoding_dissector(tvbuff_t **tvb_ptr, packet_info *pinfo,
if(chunked_data_size > 0) {
new_tvb = tvb_new_real_data(raw_data,
chunked_data_size, chunked_data_size);
- tvb_set_free_cb(new_tvb, g_free);
}
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index 7e557654db..af72ea161a 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -224,7 +224,7 @@ static void
ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_tree *tree, int tagged_parameters_len, int ftype);
-static tvbuff_t *try_decrypt(tvbuff_t *tvb, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key);
+static tvbuff_t *try_decrypt(tvbuff_t *tvb, packet_info *pinfo, guint32 offset, guint32 len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key);
static int weak_iv(guchar *iv);
@@ -17785,7 +17785,7 @@ dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
guint32 sec_header=0;
guint32 sec_trailer=0;
- next_tvb = try_decrypt(tvb, hdr_len, reported_len, &algorithm, &sec_header, &sec_trailer, &used_key);
+ next_tvb = try_decrypt(tvb, pinfo, hdr_len, reported_len, &algorithm, &sec_header, &sec_trailer, &used_key);
keybyte = tvb_get_guint8(tvb, hdr_len + 3);
key = KEY_OCTET_WEP_KEY(keybyte);
@@ -18624,7 +18624,7 @@ dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_
/* It returns the algorithm used for decryption and the header and trailer lengths. */
static tvbuff_t *
-try_decrypt(tvbuff_t *tvb, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key)
+try_decrypt(tvbuff_t *tvb, packet_info *pinfo, guint offset, guint len, guint8 *algorithm, guint32 *sec_header, guint32 *sec_trailer, PAIRPDCAP_KEY_ITEM used_key)
{
const guint8 *enc_data;
tvbuff_t *decr_tvb = NULL;
@@ -18661,13 +18661,12 @@ try_decrypt(tvbuff_t *tvb, guint offset, guint len, guint8 *algorithm, guint32 *
}
/* allocate buffer for decrypted payload */
- tmp = (guint8 *)g_memdup(dec_data+offset, dec_caplen-offset);
+ tmp = (guint8 *)wmem_memdup(pinfo->pool, dec_data+offset, dec_caplen-offset);
len = dec_caplen-offset;
/* decrypt successful, let's set up a new data tvb. */
decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
- tvb_set_free_cb(decr_tvb, g_free);
}
return decr_tvb;
diff --git a/epan/dissectors/packet-ipsec.c b/epan/dissectors/packet-ipsec.c
index e5a8ea4d3d..d0202984e6 100644
--- a/epan/dissectors/packet-ipsec.c
+++ b/epan/dissectors/packet-ipsec.c
@@ -1973,15 +1973,12 @@ dissect_esp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
if(decrypt_ok && (decrypted_len > esp_iv_len))
{
- tvb_decrypted = tvb_new_child_real_data(tvb, (guint8 *)g_memdup(decrypted_data+sizeof(guint8)*esp_iv_len,
+ tvb_decrypted = tvb_new_child_real_data(tvb, (guint8 *)wmem_memdup(pinfo->pool, decrypted_data+sizeof(guint8)*esp_iv_len,
decrypted_len - esp_iv_len),
decrypted_len - esp_iv_len, decrypted_len - esp_iv_len);
add_new_data_source(pinfo, tvb_decrypted, "Decrypted Data");
- /* Handler to free the Decrypted Data Buffer. */
- tvb_set_free_cb(tvb_decrypted,g_free);
-
if(tvb_bytes_exist(tvb, 8, esp_iv_len))
{
if(esp_iv_len > 0)
diff --git a/epan/dissectors/packet-kerberos.c b/epan/dissectors/packet-kerberos.c
index 02224e8e59..8c4199a3ae 100644
--- a/epan/dissectors/packet-kerberos.c
+++ b/epan/dissectors/packet-kerberos.c
@@ -647,7 +647,7 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
}
read_keytab_file_from_preferences();
- data.data = (char *)g_malloc(length);
+ data.data = (char *)wmem_alloc(pinfo->pool, length);
data.length = length;
for(ek=enc_key_list;ek;ek=ek->next){
@@ -673,7 +673,6 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
"Decrypted keytype %d in frame %u using %s",
ek->keytype, pinfo->num, ek->key_origin);
- /* return a private g_malloced blob to the caller */
user_data=data.data;
if (datalen) {
*datalen = data.length;
@@ -681,7 +680,6 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
return user_data;
}
}
- g_free(data.data);
return NULL;
}
@@ -812,12 +810,11 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
keys. So just give it a copy of the crypto data instead.
This has been seen for RC4-HMAC blobs.
*/
- cryptocopy = (guint8 *)g_memdup(cryptotext, length);
+ cryptocopy = (guint8 *)wmem_memdup(wmem_packet_scope(), cryptotext, length);
ret = krb5_decrypt_ivec(krb5_ctx, crypto, usage,
cryptocopy, length,
&data,
NULL);
- g_free(cryptocopy);
if((ret == 0) && (length>0)){
char *user_data;
@@ -826,8 +823,8 @@ decrypt_krb5_data(proto_tree *tree _U_, packet_info *pinfo,
ek->keytype, pinfo->num, ek->key_origin);
krb5_crypto_destroy(krb5_ctx, crypto);
- /* return a private g_malloced blob to the caller */
- user_data = (char *)g_memdup(data.data, (guint)data.length);
+ /* return a private wmem_alloced blob to the caller */
+ user_data = (char *)wmem_memdup(pinfo->pool, data.data, (guint)data.length);
if (datalen) {
*datalen = (int)data.length;
}
@@ -978,7 +975,7 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
return NULL;
}
- decrypted_data = g_malloc(length);
+ decrypted_data = wmem_alloc(wmem_packet_scope(), length);
for(ske = service_key_list; ske != NULL; ske = g_slist_next(ske)){
gboolean do_continue = FALSE;
sk = (service_key_t *) ske->data;
@@ -1023,20 +1020,17 @@ decrypt_krb5_data(proto_tree *tree, packet_info *pinfo,
md5_finish(&md5s, digest);
if (tvb_memeql (encr_tvb, 8, digest, 16) == 0) {
- plaintext = g_malloc(data_len);
- tvb_memcpy(encr_tvb, plaintext, CONFOUNDER_PLUS_CHECKSUM, data_len);
+ plaintext = (guint8* )tvb_memdup(pinfo->pool, encr_tvb, CONFOUNDER_PLUS_CHECKSUM, data_len);
tvb_free(encr_tvb);
if (datalen) {
*datalen = data_len;
}
- g_free(decrypted_data);
return(plaintext);
}
tvb_free(encr_tvb);
}
- g_free(decrypted_data);
return NULL;
}
@@ -1607,7 +1601,6 @@ dissect_krb5_decrypt_ticket_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offse
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1644,7 +1637,6 @@ dissect_krb5_decrypt_authenticator_data (gboolean imp_tag _U_, tvbuff_t *tvb, in
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1686,7 +1678,6 @@ dissect_krb5_decrypt_KDC_REP_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offs
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1718,7 +1709,6 @@ dissect_krb5_decrypt_PA_ENC_TIMESTAMP (gboolean imp_tag _U_, tvbuff_t *tvb, int
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1749,7 +1739,6 @@ dissect_krb5_decrypt_AP_REP_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offse
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1780,7 +1769,6 @@ dissect_krb5_decrypt_PRIV_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offset,
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -1811,7 +1799,6 @@ dissect_krb5_decrypt_CRED_data (gboolean imp_tag _U_, tvbuff_t *tvb, int offset,
if(plaintext){
tvbuff_t *child_tvb;
child_tvb = tvb_new_child_real_data(tvb, plaintext, length, length);
- tvb_set_free_cb(child_tvb, g_free);
/* Add the decrypted data to the data source list. */
add_new_data_source(actx->pinfo, child_tvb, "Decrypted Krb5");
@@ -4341,7 +4328,7 @@ dissect_kerberos_ChangePasswdData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
/*--- End of included file: packet-kerberos-fn.c ---*/
-#line 1985 "./asn1/kerberos/packet-kerberos-template.c"
+#line 1972 "./asn1/kerberos/packet-kerberos-template.c"
/* Make wrappers around exported functions for now */
int
@@ -5395,7 +5382,7 @@ void proto_register_kerberos(void) {
NULL, HFILL }},
/*--- End of included file: packet-kerberos-hfarr.c ---*/
-#line 2366 "./asn1/kerberos/packet-kerberos-template.c"
+#line 2353 "./asn1/kerberos/packet-kerberos-template.c"
};
/* List of subtrees */
@@ -5473,7 +5460,7 @@ void proto_register_kerberos(void) {
&ett_kerberos_ChangePasswdData,
/*--- End of included file: packet-kerberos-ettarr.c ---*/
-#line 2382 "./asn1/kerberos/packet-kerberos-template.c"
+#line 2369 "./asn1/kerberos/packet-kerberos-template.c"
};
static ei_register_info ei[] = {
diff --git a/epan/dissectors/packet-kink.c b/epan/dissectors/packet-kink.c
index 94887e1929..16fc8fec82 100644
--- a/epan/dissectors/packet-kink.c
+++ b/epan/dissectors/packet-kink.c
@@ -692,7 +692,6 @@ dissect_payload_kink_encrypt(packet_info *pinfo, tvbuff_t *tvb, int offset, prot
plaintext=decrypt_krb5_data(tree, pinfo, 0, next_tvb, keytype, NULL);
if(plaintext){
next_tvb=tvb_new_child_real_data(tvb, plaintext, encrypt_length, encrypt_length);
- tvb_set_free_cb(next_tvb, g_free);
add_new_data_source(pinfo, next_tvb, "decrypted kink encrypt");
dissect_decrypt_kink_encrypt(pinfo, next_tvb, tree, encrypt_length);
}
diff --git a/epan/dissectors/packet-lapd.c b/epan/dissectors/packet-lapd.c
index 8f782c0aad..2f887fd8fc 100644
--- a/epan/dissectors/packet-lapd.c
+++ b/epan/dissectors/packet-lapd.c
@@ -298,10 +298,9 @@ dissect_lapd_bitstream(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
if (ones == 5 && state == DATA) {
/* we don't increase bit_offset, it is an inserted zero */
} else if (ones == 6 && state == DATA) { /* probably starting flag sequence */
- buff = (guint8 *)g_memdup(data, data_len);
+ buff = (guint8 *)wmem_memdup(pinfo->pool, data, data_len);
/* Allocate new tvb for the LAPD frame */
new_tvb = tvb_new_child_real_data(tvb, buff, data_len, data_len);
- tvb_set_free_cb(new_tvb, g_free);
add_new_data_source(pinfo, new_tvb, "Decoded LAPD bitstream");
data_len = 0;
state = FLAGS;
diff --git a/epan/dissectors/packet-pkcs12.c b/epan/dissectors/packet-pkcs12.c
index c616073a42..bffb21799d 100644
--- a/epan/dissectors/packet-pkcs12.c
+++ b/epan/dissectors/packet-pkcs12.c
@@ -308,7 +308,7 @@ void PBE_reset_parameters(void)
salt = NULL;
}
-int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encrypted_tvb _U_, asn1_ctx_t *actx _U_, proto_item *item _U_)
+int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encrypted_tvb _U_, packet_info *pinfo _U_, asn1_ctx_t *actx _U_, proto_item *item _U_)
{
#ifdef HAVE_LIBGCRYPT
const char *encryption_algorithm;
@@ -398,7 +398,7 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
}
datalen = tvb_captured_length(encrypted_tvb);
- clear_data = (char *)g_malloc(datalen);
+ clear_data = (char *)wmem_alloc(pinfo->pool, datalen);
err = gcry_cipher_decrypt (cipher, clear_data, datalen, (char *)tvb_memdup(wmem_packet_scope(), encrypted_tvb, 0, datalen), datalen);
if (gcry_err_code (err)) {
@@ -406,7 +406,6 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
proto_item_append_text(item, " [Failed to decrypt with password preference]");
gcry_cipher_close (cipher);
- g_free(clear_data);
return FALSE;
}
@@ -439,7 +438,6 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
}
if(!decrypt_ok) {
- g_free(clear_data);
proto_item_append_text(item, " [Failed to decrypt with supplied password]");
return FALSE;
@@ -452,7 +450,6 @@ int PBE_decrypt_data(const char *object_identifier_id_param _U_, tvbuff_t *encry
/* OK - so now clear_data contains the decrypted data */
clear_tvb = tvb_new_child_real_data(encrypted_tvb,(const guint8 *)clear_data, datalen, datalen);
- tvb_set_free_cb(clear_tvb, g_free);
name = g_string_new("");
oidname = oid_resolved_from_string(wmem_packet_scope(), object_identifier_id_param);
@@ -802,7 +799,7 @@ dissect_pkcs12_EncryptedData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o
dissector_handle=create_dissector_handle(dissect_PrivateKeyInfo_PDU, proto_pkcs12);
dissector_change_string("ber.oid", object_identifier_id, dissector_handle);
- PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx, actx->created_item);
+ PBE_decrypt_data(object_identifier_id, encrypted_tvb, actx->pinfo, actx, actx->created_item);
/* restore the original dissector */
dissector_reset_string("ber.oid", object_identifier_id);
@@ -1150,7 +1147,7 @@ static int dissect_PBMAC1Params_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, p
/*--- End of included file: packet-pkcs12-fn.c ---*/
-#line 387 "./asn1/pkcs12/packet-pkcs12-template.c"
+#line 384 "./asn1/pkcs12/packet-pkcs12-template.c"
static int strip_octet_string(tvbuff_t *tvb)
{
@@ -1443,7 +1440,7 @@ void proto_register_pkcs12(void) {
"AlgorithmIdentifier", HFILL }},
/*--- End of included file: packet-pkcs12-hfarr.c ---*/
-#line 463 "./asn1/pkcs12/packet-pkcs12-template.c"
+#line 460 "./asn1/pkcs12/packet-pkcs12-template.c"
};
/* List of subtrees */
@@ -1474,7 +1471,7 @@ void proto_register_pkcs12(void) {
&ett_pkcs12_PBMAC1Params,
/*--- End of included file: packet-pkcs12-ettarr.c ---*/
-#line 469 "./asn1/pkcs12/packet-pkcs12-template.c"
+#line 466 "./asn1/pkcs12/packet-pkcs12-template.c"
};
static ei_register_info ei[] = {
{ &ei_pkcs12_octet_string_expected, { "pkcs12.octet_string_expected", PI_PROTOCOL, PI_WARN, "BER Error: OCTET STRING expected", EXPFILL }},
@@ -1542,7 +1539,7 @@ void proto_reg_handoff_pkcs12(void) {
/*--- End of included file: packet-pkcs12-dis-tab.c ---*/
-#line 508 "./asn1/pkcs12/packet-pkcs12-template.c"
+#line 505 "./asn1/pkcs12/packet-pkcs12-template.c"
register_ber_oid_dissector("1.2.840.113549.1.9.22.1", dissect_X509Certificate_OCTETSTRING_PDU, proto_pkcs12, "x509Certificate");
diff --git a/epan/dissectors/packet-pkcs12.h b/epan/dissectors/packet-pkcs12.h
index 18a49f5ee4..490182c0db 100644
--- a/epan/dissectors/packet-pkcs12.h
+++ b/epan/dissectors/packet-pkcs12.h
@@ -33,7 +33,7 @@
#define PACKET_PKCS12_H
void PBE_reset_parameters(void);
-int PBE_decrypt_data(const char *object_identifier_id, tvbuff_t *encrypted_tvb, asn1_ctx_t *actx, proto_item *item);
+int PBE_decrypt_data(const char *object_identifier_id, tvbuff_t *encrypted_tvb, packet_info *pinfo, asn1_ctx_t *actx, proto_item *item);
#endif /* PACKET_PKCS12_H */
diff --git a/epan/dissectors/packet-sigcomp.c b/epan/dissectors/packet-sigcomp.c
index 654381114d..25c9489838 100644
--- a/epan/dissectors/packet-sigcomp.c
+++ b/epan/dissectors/packet-sigcomp.c
@@ -1931,7 +1931,7 @@ decompress_sigcomp_message(tvbuff_t *bytecode_tvb, tvbuff_t *message_tvb, packet
"UDVM EXECUTION STARTED at Address: %u Message size %u", current_address, msg_end);
/* Largest allowed size for a message is UDVM_MEMORY_SIZE = 65536 */
- out_buff = (guint8 *)g_malloc(UDVM_MEMORY_SIZE);
+ out_buff = (guint8 *)wmem_alloc(pinfo->pool, UDVM_MEMORY_SIZE);
/* Reset offset so proto_tree_add_xxx items below accurately reflect the bytes they represent */
offset = 0;
@@ -1964,10 +1964,6 @@ execute_next_instruction:
if ( output_address > 0 ) {
/* At least something got decompressed, show it */
decomp_tvb = tvb_new_child_real_data(message_tvb, out_buff,output_address,output_address);
- /* Arrange that the allocated packet data copy be freed when the
- * tvbuff is freed.
- */
- tvb_set_free_cb( decomp_tvb, g_free );
/* Add the tvbuff to the list of tvbuffs to which the tvbuff we
* were handed refers, so it'll get cleaned up when that tvbuff
* is cleaned up.
@@ -1976,7 +1972,6 @@ execute_next_instruction:
proto_tree_add_expert(udvm_tree, pinfo, &ei_sigcomp_sigcomp_message_decompression_failure, decomp_tvb, 0, -1);
return decomp_tvb;
}
- g_free(out_buff);
return NULL;
break;
@@ -4401,10 +4396,6 @@ execute_next_instruction:
/* At least something got decompressed, show it */
decomp_tvb = tvb_new_child_real_data(message_tvb, out_buff,output_address,output_address);
- /* Arrange that the allocated packet data copy be freed when the
- * tvbuff is freed.
- */
- tvb_set_free_cb( decomp_tvb, g_free );
add_new_data_source(pinfo, decomp_tvb, "Decompressed SigComp message");
proto_tree_add_item(udvm_tree, hf_sigcomp_sigcomp_message_decompressed, decomp_tvb, 0, -1, ENC_NA);
@@ -4420,13 +4411,11 @@ execute_next_instruction:
"Addr %u Invalid instruction: %u (0x%x)", current_address,current_instruction,current_instruction);
break;
}
- g_free(out_buff);
return NULL;
decompression_failure:
proto_tree_add_expert_format(udvm_tree, pinfo, &ei_sigcomp_decompression_failure, bytecode_tvb, 0, -1,
"DECOMPRESSION FAILURE: %s", val_to_str(result_code, result_code_vals,"Unknown (%u)"));
- g_free(out_buff);
return NULL;
}
diff --git a/epan/dissectors/packet-snmp.c b/epan/dissectors/packet-snmp.c
index 5045c8c906..238c619afe 100644
--- a/epan/dissectors/packet-snmp.c
+++ b/epan/dissectors/packet-snmp.c
@@ -109,10 +109,10 @@ void proto_reg_handoff_smux(void);
static gboolean snmp_usm_auth_md5(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
static gboolean snmp_usm_auth_sha1(snmp_usm_params_t* p, guint8**, guint*, gchar const**);
-static tvbuff_t* snmp_usm_priv_des(snmp_usm_params_t*, tvbuff_t*, gchar const**);
-static tvbuff_t* snmp_usm_priv_aes128(snmp_usm_params_t*, tvbuff_t*, gchar const**);
-static tvbuff_t* snmp_usm_priv_aes192(snmp_usm_params_t*, tvbuff_t*, gchar const**);
-static tvbuff_t* snmp_usm_priv_aes256(snmp_usm_params_t*, tvbuff_t*, gchar const**);
+static tvbuff_t* snmp_usm_priv_des(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
+static tvbuff_t* snmp_usm_priv_aes128(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
+static tvbuff_t* snmp_usm_priv_aes192(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
+static tvbuff_t* snmp_usm_priv_aes256(snmp_usm_params_t*, tvbuff_t*, packet_info *pinfo, gchar const**);
static void snmp_usm_password_to_key_md5(const guint8 *password, guint passwordlen, const guint8 *engineID, guint engineLength, guint8 *key);
@@ -1757,7 +1757,7 @@ snmp_usm_auth_sha1(snmp_usm_params_t* p _U_, guint8** calc_auth_p, guint* calc_a
}
static tvbuff_t*
-snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error _U_)
+snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error _U_)
{
#ifdef HAVE_LIBGCRYPT
gcry_error_t err;
@@ -1800,7 +1800,7 @@ snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar c
cryptgrm = (guint8*)tvb_memdup(wmem_packet_scope(),encryptedData,0,-1);
- cleartext = (guint8*)g_malloc(cryptgrm_len);
+ cleartext = (guint8*)wmem_alloc(pinfo->pool, cryptgrm_len);
err = gcry_cipher_open(&hd, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_CBC, 0);
if (err != GPG_ERR_NO_ERROR) goto on_gcry_error;
@@ -1817,12 +1817,10 @@ snmp_usm_priv_des(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar c
gcry_cipher_close(hd);
clear_tvb = tvb_new_child_real_data(encryptedData, cleartext, cryptgrm_len, cryptgrm_len);
- tvb_set_free_cb(clear_tvb, g_free);
return clear_tvb;
on_gcry_error:
- g_free(cleartext);
*error = (const gchar *)gpg_strerror(err);
if (hd) gcry_cipher_close(hd);
return NULL;
@@ -1834,7 +1832,7 @@ on_gcry_error:
#ifdef HAVE_LIBGCRYPT
static tvbuff_t*
-snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar const** error, int algo)
+snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, packet_info *pinfo, gchar const** error, int algo)
{
gcry_error_t err;
gcry_cipher_hd_t hd = NULL;
@@ -1872,7 +1870,7 @@ snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar co
}
cryptgrm = (guint8*)tvb_memdup(wmem_packet_scope(),encryptedData,0,-1);
- cleartext = (guint8*)g_malloc(cryptgrm_len);
+ cleartext = (guint8*)wmem_alloc(pinfo->pool, cryptgrm_len);
err = gcry_cipher_open(&hd, algo, GCRY_CIPHER_MODE_CFB, 0);
if (err != GPG_ERR_NO_ERROR) goto on_gcry_error;
@@ -1889,12 +1887,10 @@ snmp_usm_priv_aes_common(snmp_usm_params_t* p, tvbuff_t* encryptedData, gchar co
gcry_cipher_close(hd);
clear_tvb = tvb_new_child_real_data(encryptedData, cleartext, cryptgrm_len, cryptgrm_len);
- tvb_set_free_cb(clear_tvb, g_free);
return clear_tvb;
on_gcry_error:
- g_free(cleartext);
*error = (const gchar *)gpg_strerror(err);
if (hd) gcry_cipher_close(hd);
return NULL;
@@ -1902,10 +1898,10 @@ on_gcry_error:
#endif
static tvbuff_t*
-snmp_usm_priv_aes128(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error)
+snmp_usm_priv_aes128(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error)
{
#ifdef HAVE_LIBGCRYPT
- return snmp_usm_priv_aes_common(p, encryptedData, error, GCRY_CIPHER_AES);
+ return snmp_usm_priv_aes_common(p, encryptedData, pinfo, error, GCRY_CIPHER_AES);
#else
*error = "libgcrypt not present, cannot decrypt";
return NULL;
@@ -1913,10 +1909,10 @@ snmp_usm_priv_aes128(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gcha
}
static tvbuff_t*
-snmp_usm_priv_aes192(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error)
+snmp_usm_priv_aes192(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error)
{
#ifdef HAVE_LIBGCRYPT
- return snmp_usm_priv_aes_common(p, encryptedData, error, GCRY_CIPHER_AES192);
+ return snmp_usm_priv_aes_common(p, encryptedData, pinfo, error, GCRY_CIPHER_AES192);
#else
*error = "libgcrypt not present, cannot decrypt";
return NULL;
@@ -1924,10 +1920,10 @@ snmp_usm_priv_aes192(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gcha
}
static tvbuff_t*
-snmp_usm_priv_aes256(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, gchar const** error)
+snmp_usm_priv_aes256(snmp_usm_params_t* p _U_, tvbuff_t* encryptedData _U_, packet_info *pinfo _U_, gchar const** error)
{
#ifdef HAVE_LIBGCRYPT
- return snmp_usm_priv_aes_common(p, encryptedData, error, GCRY_CIPHER_AES256);
+ return snmp_usm_priv_aes_common(p, encryptedData, pinfo, error, GCRY_CIPHER_AES256);
#else
*error = "libgcrypt not present, cannot decrypt";
return NULL;
@@ -2691,7 +2687,7 @@ dissect_snmp_T_encryptedPDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of
const gchar* error = NULL;
proto_tree* encryptedpdu_tree = proto_item_add_subtree(actx->created_item,ett_encryptedPDU);
- tvbuff_t* cleartext_tvb = usm_p.user_assoc->user.privProtocol(&usm_p, crypt_tvb, &error );
+ tvbuff_t* cleartext_tvb = usm_p.user_assoc->user.privProtocol(&usm_p, crypt_tvb, actx->pinfo, &error );
if (! cleartext_tvb) {
proto_tree_add_expert_format(encryptedpdu_tree, actx->pinfo, &ei_snmp_failed_decrypted_data_pdu,
@@ -3078,7 +3074,7 @@ static int dissect_SMUX_PDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, prot
/*--- End of included file: packet-snmp-fn.c ---*/
-#line 1873 "./asn1/snmp/packet-snmp-template.c"
+#line 1869 "./asn1/snmp/packet-snmp-template.c"
guint
@@ -3895,7 +3891,7 @@ void proto_register_snmp(void) {
NULL, HFILL }},
/*--- End of included file: packet-snmp-hfarr.c ---*/
-#line 2425 "./asn1/snmp/packet-snmp-template.c"
+#line 2421 "./asn1/snmp/packet-snmp-template.c"
};
/* List of subtrees */
@@ -3935,7 +3931,7 @@ void proto_register_snmp(void) {
&ett_snmp_RReqPDU_U,
/*--- End of included file: packet-snmp-ettarr.c ---*/
-#line 2441 "./asn1/snmp/packet-snmp-template.c"
+#line 2437 "./asn1/snmp/packet-snmp-template.c"
};
static ei_register_info ei[] = {
{ &ei_snmp_failed_decrypted_data_pdu, { "snmp.failed_decrypted_data_pdu", PI_MALFORMED, PI_WARN, "Failed to decrypt encryptedPDU", EXPFILL }},
diff --git a/epan/dissectors/packet-snmp.h b/epan/dissectors/packet-snmp.h
index 01bbaa0435..aaa09a85a5 100644
--- a/epan/dissectors/packet-snmp.h
+++ b/epan/dissectors/packet-snmp.h
@@ -40,7 +40,7 @@ typedef struct _snmp_ue_assoc_t snmp_ue_assoc_t;
typedef struct _snmp_usm_params_t snmp_usm_params_t;
typedef gboolean (*snmp_usm_authenticator_t)(snmp_usm_params_t*, guint8** calc_auth, guint* calc_auth_len, gchar const** error);
-typedef tvbuff_t* (*snmp_usm_decoder_t)(snmp_usm_params_t*, tvbuff_t* encryptedData, gchar const** error);
+typedef tvbuff_t* (*snmp_usm_decoder_t)(snmp_usm_params_t*, tvbuff_t* encryptedData, packet_info *pinfo, gchar const** error);
typedef void (*snmp_usm_password_to_key_t)(const guint8 *password, guint passwordlen, const guint8 *engineID, guint engineLength, guint8 *key);
typedef struct _snmp_usm_auth_model_t {
diff --git a/epan/dissectors/packet-spnego.c b/epan/dissectors/packet-spnego.c
index e988bb7ee8..e13b4dbad2 100644
--- a/epan/dissectors/packet-spnego.c
+++ b/epan/dissectors/packet-spnego.c
@@ -1168,15 +1168,13 @@ decrypt_gssapi_krb_cfx_wrap(proto_tree *tree,
if (output) {
guint8 *outdata;
- outdata = (guint8 *)g_memdup(output, tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb));
- g_free(output);
+ outdata = (guint8 *)wmem_memdup(pinfo->pool, output, tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb));
gssapi_encrypt->gssapi_decrypted_tvb=tvb_new_child_real_data(gssapi_encrypt->gssapi_encrypted_tvb,
outdata,
tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb),
tvb_captured_length(gssapi_encrypt->gssapi_encrypted_tvb));
add_new_data_source(pinfo, gssapi_encrypt->gssapi_decrypted_tvb, "Decrypted GSS-Krb5");
- tvb_set_free_cb(gssapi_encrypt->gssapi_decrypted_tvb, g_free);
}
}
@@ -1966,7 +1964,7 @@ void proto_register_spnego(void) {
NULL, HFILL }},
/*--- End of included file: packet-spnego-hfarr.c ---*/
-#line 1421 "./asn1/spnego/packet-spnego-template.c"
+#line 1419 "./asn1/spnego/packet-spnego-template.c"
};
/* List of subtrees */
@@ -1989,7 +1987,7 @@ void proto_register_spnego(void) {
&ett_spnego_InitialContextToken_U,
/*--- End of included file: packet-spnego-ettarr.c ---*/
-#line 1431 "./asn1/spnego/packet-spnego-template.c"
+#line 1429 "./asn1/spnego/packet-spnego-template.c"
};
static ei_register_info ei[] = {
diff --git a/epan/dissectors/packet-tdmop.c b/epan/dissectors/packet-tdmop.c
index 4204c3c14b..6bc470bfd5 100644
--- a/epan/dissectors/packet-tdmop.c
+++ b/epan/dissectors/packet-tdmop.c
@@ -191,10 +191,9 @@ static int dissect_tdmop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo
}
if (dchannel_len>0)
{
- guint8 *buff = (guint8 *)g_memdup(dchannel_data, dchannel_len);
+ guint8 *buff = (guint8 *)wmem_memdup(pinfo->pool, dchannel_data, dchannel_len);
tvbuff_t *new_tvb;
new_tvb = tvb_new_child_real_data(tvb, buff, dchannel_len, dchannel_len);
- tvb_set_free_cb(new_tvb, g_free);
call_dissector(lapd_handle, new_tvb, pinfo, tree);
}
}
diff --git a/epan/dissectors/pidl/mapi/request.cnf.c b/epan/dissectors/pidl/mapi/request.cnf.c
index 5baca16f26..b7c4e8d76d 100644
--- a/epan/dissectors/pidl/mapi/request.cnf.c
+++ b/epan/dissectors/pidl/mapi/request.cnf.c
@@ -111,7 +111,7 @@ mapi_dissect_element_EcDoRpc_request(tvbuff_t *tvb _U_, int offset _U_, packet_i
static int
-mapi_dissect_element_EcDoRpc_request_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
+mapi_dissect_element_EcDoRpc_request_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
{
guint32 size;
int start_offset = offset;
@@ -137,13 +137,12 @@ mapi_dissect_element_EcDoRpc_request_(tvbuff_t *tvb _U_, int offset _U_, packet_
ptr = tvb_get_ptr(tvb, offset, size);
- decrypted_data = (guint8 *)g_malloc(size);
+ decrypted_data = (guint8 *)wmem_alloc(pinfo->pool, size);
for (i = 0; i < size; i++) {
decrypted_data[i] = ptr[i] ^ 0xA5;
}
decrypted_tvb = tvb_new_child_real_data(tvb, decrypted_data, size, reported_len);
- tvb_set_free_cb(decrypted_tvb, g_free);
add_new_data_source(pinfo, decrypted_tvb, "Decrypted MAPI");
diff --git a/epan/dissectors/pidl/mapi/response.cnf.c b/epan/dissectors/pidl/mapi/response.cnf.c
index d0a16d42ca..a4f4b7e034 100644
--- a/epan/dissectors/pidl/mapi/response.cnf.c
+++ b/epan/dissectors/pidl/mapi/response.cnf.c
@@ -115,7 +115,7 @@ mapi_dissect_element_EcDoRpc_response(tvbuff_t *tvb _U_, int offset _U_, packet_
static int
-mapi_dissect_element_EcDoRpc_response_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
+mapi_dissect_element_EcDoRpc_response_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_)
{
guint32 size;
int start_offset = offset;
@@ -142,13 +142,12 @@ mapi_dissect_element_EcDoRpc_response_(tvbuff_t *tvb _U_, int offset _U_, packet
ptr = tvb_get_ptr(tvb, offset, size);
- decrypted_data = (guint8 *)g_malloc(size);
+ decrypted_data = (guint8 *)wmem_alloc(pinfo->pool, size);
for (i = 0; i < size; i++) {
decrypted_data[i] = ptr[i] ^ 0xA5;
}
decrypted_tvb = tvb_new_child_real_data(tvb, decrypted_data, size, reported_len);
- tvb_set_free_cb(decrypted_tvb, g_free);
add_new_data_source(pinfo, decrypted_tvb, "Decrypted MAPI");
tr = proto_tree_add_subtree(tree, decrypted_tvb, 0, size, ett_mapi_mapi_response, NULL, "Decrypted MAPI PDU");
diff --git a/plugins/irda/packet-sir.c b/plugins/irda/packet-sir.c
index 11188a47bf..13534a7c5f 100644
--- a/plugins/irda/packet-sir.c
+++ b/plugins/irda/packet-sir.c
@@ -80,7 +80,7 @@ unescape_data(tvbuff_t *tvb, packet_info *pinfo)
} else {
guint length = tvb_captured_length(tvb);
guint offset;
- guint8 *data = (guint8 *)g_malloc(length);
+ guint8 *data = (guint8 *)wmem_alloc(pinfo->pool, length);
guint8 *dst = data;
tvbuff_t *next_tvb;
@@ -93,7 +93,6 @@ unescape_data(tvbuff_t *tvb, packet_info *pinfo)
}
next_tvb = tvb_new_child_real_data(tvb, data, (guint) (dst-data), (guint) (dst-data));
- tvb_set_free_cb(next_tvb, g_free);
add_new_data_source(pinfo, next_tvb, "Unescaped SIR");
return next_tvb;
}