aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee/include/net/abstract_tcp_server2.inl
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2019-06-14 16:08:58 +0200
committerRiccardo Spagni <ric@spagni.net>2019-06-14 16:08:59 +0200
commitc58255ec12491dbc4d8c363280ede7869f447bf9 (patch)
tree7301d251061d44106b1cc5a50778c8a1db86d230 /contrib/epee/include/net/abstract_tcp_server2.inl
parentMerge pull request #5633 (diff)
parentrpc: restrict the recent cutoff size in restricted RPC mode (diff)
downloadmonero-c58255ec12491dbc4d8c363280ede7869f447bf9.tar.xz
Merge pull request #5640
542cab02 rpc: restrict the recent cutoff size in restricted RPC mode (moneromooo-monero) 434e617a ensure no NULL is passed to memcpy (moneromooo-monero) 279f1f2c abstract_tcp_server2: improve DoS resistance (moneromooo-monero) 756773e5 serialization: check stream good flag at the end (moneromooo-monero) e3f714aa tree-hash: allocate variable memory on heap, not stack (moneromooo-monero) 67baa3a6 cryptonote: throw on tx hash calculation error (moneromooo-monero) d6bb9ecc serialization: fail on read_varint error (moneromooo-monero) 19490e44 cryptonote_protocol: fix another potential P2P DoS (moneromooo-monero) fa4aa47e cryptonote_protocol: expand basic DoS protection (moneromooo-monero) 3c953d53 cryptonote_protocol_handler: prevent potential DoS (anonimal) b873b69d epee: basic sanity check on allocation size from untrusted source (moneromooo-monero)
Diffstat (limited to 'contrib/epee/include/net/abstract_tcp_server2.inl')
-rw-r--r--contrib/epee/include/net/abstract_tcp_server2.inl9
1 files changed, 5 insertions, 4 deletions
diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl
index 821594355..fa5858b9f 100644
--- a/contrib/epee/include/net/abstract_tcp_server2.inl
+++ b/contrib/epee/include/net/abstract_tcp_server2.inl
@@ -54,6 +54,9 @@
#undef MONERO_DEFAULT_LOG_CATEGORY
#define MONERO_DEFAULT_LOG_CATEGORY "net"
+#define AGGRESSIVE_TIMEOUT_THRESHOLD 120 // sockets
+#define NEW_CONNECTION_TIMEOUT_LOCAL 1200000 // 2 minutes
+#define NEW_CONNECTION_TIMEOUT_REMOTE 10000 // 10 seconds
#define DEFAULT_TIMEOUT_MS_LOCAL 1800000 // 30 minutes
#define DEFAULT_TIMEOUT_MS_REMOTE 300000 // 5 minutes
#define TIMEOUT_EXTRA_MS_PER_BYTE 0.2
@@ -189,7 +192,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
m_protocol_handler.after_init_connection();
- reset_timer(get_default_timeout(), false);
+ reset_timer(boost::posix_time::milliseconds(m_local ? NEW_CONNECTION_TIMEOUT_LOCAL : NEW_CONNECTION_TIMEOUT_REMOTE), false);
// first read on the raw socket to detect SSL for the server
buffer_ssl_init_fill = 0;
@@ -691,7 +694,7 @@ PRAGMA_WARNING_DISABLE_VS(4355)
{
unsigned count;
try { count = host_count(m_host); } catch (...) { count = 0; }
- const unsigned shift = std::min(std::max(count, 1u) - 1, 8u);
+ const unsigned shift = get_state().sock_count > AGGRESSIVE_TIMEOUT_THRESHOLD ? std::min(std::max(count, 1u) - 1, 8u) : 0;
boost::posix_time::milliseconds timeout(0);
if (m_local)
timeout = boost::posix_time::milliseconds(DEFAULT_TIMEOUT_MS_LOCAL >> shift);
@@ -730,8 +733,6 @@ PRAGMA_WARNING_DISABLE_VS(4355)
template<class t_protocol_handler>
void connection<t_protocol_handler>::reset_timer(boost::posix_time::milliseconds ms, bool add)
{
- if (m_connection_type != e_connection_type_RPC)
- return;
MTRACE("Setting " << ms << " expiry");
auto self = safe_shared_from_this();
if(!self)