diff options
author | David Barksdale <amatus@amat.us> | 2017-11-12 21:46:16 -0600 |
---|---|---|
committer | David Barksdale <amatus@amat.us> | 2017-11-12 22:02:18 -0600 |
commit | 16e4f0c52cf2303b02725b69ae16be494a147c56 (patch) | |
tree | 1e2039c7c4ecc741a71fb2ec0b4304ec5035ae9b /src/transport/gnunet-service-transport.c | |
parent | d7b33a905546adb869f022cbe86beb0b0582fd4b (diff) | |
download | gnunet-16e4f0c52cf2303b02725b69ae16be494a147c56.tar.gz gnunet-16e4f0c52cf2303b02725b69ae16be494a147c56.zip |
Fix memory leak and use-after-free
Diffstat (limited to 'src/transport/gnunet-service-transport.c')
-rw-r--r-- | src/transport/gnunet-service-transport.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c index ec4d82164..6b354df98 100644 --- a/src/transport/gnunet-service-transport.c +++ b/src/transport/gnunet-service-transport.c | |||
@@ -541,6 +541,13 @@ client_disconnect_cb (void *cls, | |||
541 | GNUNET_CONTAINER_multipeermap_iterate (active_stccs, | 541 | GNUNET_CONTAINER_multipeermap_iterate (active_stccs, |
542 | &mark_match_down, | 542 | &mark_match_down, |
543 | tc); | 543 | tc); |
544 | for (struct AddressToStringContext *cur = a2s_head; | ||
545 | NULL != cur; | ||
546 | cur = cur->next) | ||
547 | { | ||
548 | if (cur->tc == tc) | ||
549 | cur->tc = NULL; | ||
550 | } | ||
544 | GNUNET_CONTAINER_DLL_remove (clients_head, | 551 | GNUNET_CONTAINER_DLL_remove (clients_head, |
545 | clients_tail, | 552 | clients_tail, |
546 | tc); | 553 | tc); |
@@ -864,6 +871,8 @@ transmit_address_to_client (void *cls, | |||
864 | 871 | ||
865 | GNUNET_assert ( (GNUNET_OK == res) || | 872 | GNUNET_assert ( (GNUNET_OK == res) || |
866 | (GNUNET_SYSERR == res) ); | 873 | (GNUNET_SYSERR == res) ); |
874 | if (NULL == actx->tc) | ||
875 | return; | ||
867 | if (NULL == buf) | 876 | if (NULL == buf) |
868 | { | 877 | { |
869 | env = GNUNET_MQ_msg (atsm, | 878 | env = GNUNET_MQ_msg (atsm, |
@@ -878,6 +887,7 @@ transmit_address_to_client (void *cls, | |||
878 | GNUNET_CONTAINER_DLL_remove (a2s_head, | 887 | GNUNET_CONTAINER_DLL_remove (a2s_head, |
879 | a2s_tail, | 888 | a2s_tail, |
880 | actx); | 889 | actx); |
890 | GNUNET_free (actx); | ||
881 | return; | 891 | return; |
882 | } | 892 | } |
883 | if (GNUNET_SYSERR == res) | 893 | if (GNUNET_SYSERR == res) |