diff options
author | David Barksdale <amatus@amat.us> | 2017-10-08 08:58:01 -0500 |
---|---|---|
committer | David Barksdale <amatus@amat.us> | 2017-10-08 09:51:06 -0500 |
commit | 6107aebdf21a59834c3fe0eb6d3d664f1827c7bc (patch) | |
tree | a9ad6e74bac4b6f2e73a683ce4ec6354e25a46c2 | |
parent | c831b76d24e75c692ab6141f327d1a91d391f93b (diff) | |
download | gnunet-6107aebdf21a59834c3fe0eb6d3d664f1827c7bc.tar.gz gnunet-6107aebdf21a59834c3fe0eb6d3d664f1827c7bc.zip |
Don't start multiple blacklist checks per ve
This fixes a use-after-free I was seeing.
-rw-r--r-- | src/transport/gnunet-service-transport_validation.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c index 4a6d427be..5a8539f72 100644 --- a/src/transport/gnunet-service-transport_validation.c +++ b/src/transport/gnunet-service-transport_validation.c | |||
@@ -697,7 +697,6 @@ revalidate_address (void *cls) | |||
697 | struct GNUNET_TIME_Relative canonical_delay; | 697 | struct GNUNET_TIME_Relative canonical_delay; |
698 | struct GNUNET_TIME_Relative delay; | 698 | struct GNUNET_TIME_Relative delay; |
699 | struct GNUNET_TIME_Relative blocked_for; | 699 | struct GNUNET_TIME_Relative blocked_for; |
700 | struct GST_BlacklistCheck *bc; | ||
701 | uint32_t rdelay; | 700 | uint32_t rdelay; |
702 | 701 | ||
703 | ve->revalidation_task = NULL; | 702 | ve->revalidation_task = NULL; |
@@ -784,15 +783,17 @@ revalidate_address (void *cls) | |||
784 | GNUNET_STATISTICS_update (GST_stats, | 783 | GNUNET_STATISTICS_update (GST_stats, |
785 | gettext_noop ("# address revalidations started"), 1, | 784 | gettext_noop ("# address revalidations started"), 1, |
786 | GNUNET_NO); | 785 | GNUNET_NO); |
787 | bc = GST_blacklist_test_allowed (&ve->address->peer, | 786 | if (NULL != ve->bc) |
788 | ve->address->transport_name, | 787 | { |
789 | &transmit_ping_if_allowed, | 788 | GST_blacklist_test_cancel (ve->bc); |
790 | ve, | 789 | ve->bc = NULL; |
791 | NULL, | 790 | } |
792 | NULL); | 791 | ve->bc = GST_blacklist_test_allowed (&ve->address->peer, |
793 | if (NULL != bc) | 792 | ve->address->transport_name, |
794 | ve->bc = bc; /* only set 'bc' if 'transmit_ping_if_allowed' was not already | 793 | &transmit_ping_if_allowed, |
795 | * called... */ | 794 | ve, |
795 | NULL, | ||
796 | NULL); | ||
796 | } | 797 | } |
797 | 798 | ||
798 | 799 | ||