forked from osmocom/wireshark
isakmp: Free the UAT tables' records using a free callback
Change-Id: Ife44b225337e5c583c722ac62f711ed3ec9cf808 Reviewed-on: https://code.wireshark.org/review/30535 Reviewed-by: Peter Wu <peter@lekensteyn.nl> Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
54c966b986
commit
9b6b36beae
|
@ -5830,27 +5830,6 @@ isakmp_cleanup_protocol(void) {
|
|||
g_hash_table_destroy(defrag_next_payload_hash);
|
||||
}
|
||||
|
||||
static void
|
||||
isakmp_shutdown(void)
|
||||
{
|
||||
guint i;
|
||||
for (i = 0; i < num_ikev2_uat_data; i++) {
|
||||
ikev2_uat_data_t* data = &ikev2_uat_data[i];
|
||||
g_free(data->key.spii);
|
||||
g_free(data->key.spir);
|
||||
g_free(data->sk_ei);
|
||||
g_free(data->sk_er);
|
||||
g_free(data->sk_ai);
|
||||
g_free(data->sk_ar);
|
||||
}
|
||||
|
||||
for (i = 0; i < num_ikev1_uat_data; i++) {
|
||||
ikev1_uat_data_key_t* data = &ikev1_uat_data[i];
|
||||
g_free(data->icookie);
|
||||
g_free(data->key);
|
||||
}
|
||||
}
|
||||
|
||||
UAT_BUFFER_CB_DEF(ikev1_users, icookie, ikev1_uat_data_key_t, icookie, icookie_len)
|
||||
UAT_BUFFER_CB_DEF(ikev1_users, key, ikev1_uat_data_key_t, key, key_len)
|
||||
|
||||
|
@ -5875,6 +5854,28 @@ static gboolean ikev1_uat_data_update_cb(void* p, char** err) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void*
|
||||
ikev1_uat_data_copy_cb(void *dest, const void *source, size_t len _U_)
|
||||
{
|
||||
const ikev1_uat_data_key_t* o = (const ikev1_uat_data_key_t*)source;
|
||||
ikev1_uat_data_key_t* d = (ikev1_uat_data_key_t*)dest;
|
||||
|
||||
d->icookie = (guchar *)g_memdup(o->icookie, o->icookie_len);
|
||||
d->icookie_len = o->icookie_len;
|
||||
d->key = (guchar *)g_memdup(o->key, o->key_len);
|
||||
d->key_len = o->key_len;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
static void
|
||||
ikev1_uat_data_free_cb(void *r)
|
||||
{
|
||||
ikev1_uat_data_key_t *rec = (ikev1_uat_data_key_t *)r;
|
||||
g_free(rec->icookie);
|
||||
g_free(rec->key);
|
||||
}
|
||||
|
||||
UAT_BUFFER_CB_DEF(ikev2_users, spii, ikev2_uat_data_t, key.spii, key.spii_len)
|
||||
UAT_BUFFER_CB_DEF(ikev2_users, spir, ikev2_uat_data_t, key.spir, key.spir_len)
|
||||
UAT_BUFFER_CB_DEF(ikev2_users, sk_ei, ikev2_uat_data_t, sk_ei, sk_ei_len)
|
||||
|
@ -5884,6 +5885,39 @@ UAT_BUFFER_CB_DEF(ikev2_users, sk_ai, ikev2_uat_data_t, sk_ai, sk_ai_len)
|
|||
UAT_BUFFER_CB_DEF(ikev2_users, sk_ar, ikev2_uat_data_t, sk_ar, sk_ar_len)
|
||||
UAT_VS_DEF(ikev2_users, auth_alg, ikev2_uat_data_t, guint, IKEV2_AUTH_HMAC_SHA1_96, IKEV2_AUTH_HMAC_SHA1_96_STR)
|
||||
|
||||
static void*
|
||||
ikev2_uat_data_copy_cb(void *dest, const void *source, size_t len _U_)
|
||||
{
|
||||
const ikev2_uat_data_t* o = (const ikev2_uat_data_t*)source;
|
||||
ikev2_uat_data_t* d = (ikev2_uat_data_t*)dest;
|
||||
|
||||
d->key.spii = (guchar *)g_memdup(o->key.spii, o->key.spii_len);
|
||||
d->key.spii_len = o->key.spii_len;
|
||||
|
||||
d->key.spir = (guchar *)g_memdup(o->key.spir, o->key.spir_len);
|
||||
d->key.spir_len = o->key.spir_len;
|
||||
|
||||
d->encr_alg = o->encr_alg;
|
||||
d->auth_alg = o->auth_alg;
|
||||
|
||||
d->sk_ei = (guchar *)g_memdup(o->sk_ei, o->sk_ei_len);
|
||||
d->sk_ei_len = o->sk_ei_len;
|
||||
|
||||
d->sk_er = (guchar *)g_memdup(o->sk_er, o->sk_er_len);
|
||||
d->sk_er_len = o->sk_er_len;
|
||||
|
||||
d->sk_ai = (guchar *)g_memdup(o->sk_ai, o->sk_ai_len);
|
||||
d->sk_ai_len = o->sk_ai_len;
|
||||
|
||||
d->sk_ar = (guchar *)g_memdup(o->sk_ar, o->sk_ar_len);
|
||||
d->sk_ar_len = o->sk_ar_len;
|
||||
|
||||
d->encr_spec = (ikev2_encr_alg_spec_t *)g_memdup(o->encr_spec, sizeof(ikev2_encr_alg_spec_t));
|
||||
d->auth_spec = (ikev2_auth_alg_spec_t *)g_memdup(o->auth_spec, sizeof(ikev2_auth_alg_spec_t));
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
static gboolean ikev2_uat_data_update_cb(void* p, char** err) {
|
||||
ikev2_uat_data_t *ud = (ikev2_uat_data_t *)p;
|
||||
|
||||
|
@ -5938,6 +5972,18 @@ static gboolean ikev2_uat_data_update_cb(void* p, char** err) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
ikev2_uat_data_free_cb(void *r)
|
||||
{
|
||||
ikev2_uat_data_t *rec = (ikev2_uat_data_t *)r;
|
||||
g_free(rec->key.spii);
|
||||
g_free(rec->key.spir);
|
||||
g_free(rec->sk_ei);
|
||||
g_free(rec->sk_er);
|
||||
g_free(rec->sk_ai);
|
||||
g_free(rec->sk_ar);
|
||||
}
|
||||
|
||||
void
|
||||
proto_register_isakmp(void)
|
||||
{
|
||||
|
@ -7260,7 +7306,6 @@ proto_register_isakmp(void)
|
|||
expert_register_field_array(expert_isakmp, ei, array_length(ei));
|
||||
register_init_routine(&isakmp_init_protocol);
|
||||
register_cleanup_routine(&isakmp_cleanup_protocol);
|
||||
register_shutdown_routine(&isakmp_shutdown);
|
||||
reassembly_table_register(&isakmp_cisco_reassembly_table,
|
||||
&addresses_reassembly_table_functions);
|
||||
reassembly_table_register(&isakmp_ike2_reassembly_table,
|
||||
|
@ -7277,9 +7322,9 @@ proto_register_isakmp(void)
|
|||
&num_ikev1_uat_data,
|
||||
UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
|
||||
"ChIKEv1DecryptionSection",
|
||||
NULL,
|
||||
ikev1_uat_data_copy_cb,
|
||||
ikev1_uat_data_update_cb,
|
||||
NULL,
|
||||
ikev1_uat_data_free_cb,
|
||||
NULL,
|
||||
NULL,
|
||||
ikev1_uat_flds);
|
||||
|
@ -7298,9 +7343,9 @@ proto_register_isakmp(void)
|
|||
&num_ikev2_uat_data,
|
||||
UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
|
||||
"ChIKEv2DecryptionSection",
|
||||
NULL,
|
||||
ikev2_uat_data_copy_cb,
|
||||
ikev2_uat_data_update_cb,
|
||||
NULL,
|
||||
ikev2_uat_data_free_cb,
|
||||
NULL,
|
||||
NULL,
|
||||
ikev2_uat_flds);
|
||||
|
|
Loading…
Reference in New Issue