From 85ef0e0940202d2bdeb1600648b2e6ea1c8edd9a Mon Sep 17 00:00:00 2001 From: Gioacchino Mazzurco Date: Wed, 28 Aug 2019 21:39:25 +0200 Subject: [PATCH] Protect p3BanList::isAddressAccepted with mutex This method is called from other threads and apparently caused a sporadic crash caought on Android. See retroshare://forum?name=Got%20crash%20on%20Android%20with%20GDB%20backtrace&id=95de1451952d8c38cb1cdfdb85eed986&msgid=ac8c9d41f2cd0c9e8e290433c7f296fecb2d62b3 --- libretroshare/src/services/p3banlist.cc | 13 +++++++------ libretroshare/src/services/p3banlist.h | 1 - 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libretroshare/src/services/p3banlist.cc b/libretroshare/src/services/p3banlist.cc index 7fd70f71b..a257d2772 100644 --- a/libretroshare/src/services/p3banlist.cc +++ b/libretroshare/src/services/p3banlist.cc @@ -306,18 +306,23 @@ bool p3BanList::acceptedBanRanges_locked(const BanListPeer& blp) } return false ; } + bool p3BanList::isAddressAccepted( const sockaddr_storage& dAddr, uint32_t checking_flags, uint32_t& check_result ) { check_result = RSBANLIST_CHECK_RESULT_NOCHECK; - if(!mIPFilteringEnabled) return true; sockaddr_storage addr; sockaddr_storage_copy(dAddr, addr); if(!sockaddr_storage_ipv6_to_ipv4(addr)) return true; if(sockaddr_storage_isLoopbackNet(addr)) return true; + + RS_STACK_MUTEX(mBanMtx); + + if(!mIPFilteringEnabled) return true; + #ifdef DEBUG_BANLIST std::cerr << "isAddressAccepted(): tested addr=" << sockaddr_storage_iptostring(addr) << ", checking flags=" << checking_flags ; #endif @@ -409,6 +414,7 @@ bool p3BanList::isAddressAccepted( check_result = RSBANLIST_CHECK_RESULT_ACCEPTED; return true ; } + void p3BanList::getWhiteListedIps(std::list &lst) { RS_STACK_MUTEX(mBanMtx) ; @@ -582,11 +588,6 @@ int p3BanList::tick() return 0; } -int p3BanList::status() -{ - return 1; -} - void p3BanList::getDhtInfo() { // Get the list of masquerading peers from the DHT. Add them as potential IPs to be banned. diff --git a/libretroshare/src/services/p3banlist.h b/libretroshare/src/services/p3banlist.h index 788e33e65..b61b7cb71 100644 --- a/libretroshare/src/services/p3banlist.h +++ b/libretroshare/src/services/p3banlist.h @@ -105,7 +105,6 @@ public: */ virtual int tick(); - virtual int status(); int sendPackets(); bool processIncoming();