From ef1a196c5441ffd4a557df90f6aa4df7716cecc0 Mon Sep 17 00:00:00 2001 From: int88 <106391185+int88@users.noreply.github.com> Date: Tue, 12 Mar 2024 01:35:30 +0800 Subject: [PATCH] fix: ban trusted peer for a short period (#7071) --- crates/net/network/src/peers/manager.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/net/network/src/peers/manager.rs b/crates/net/network/src/peers/manager.rs index d3e1e292b497..4dd309b58f39 100644 --- a/crates/net/network/src/peers/manager.rs +++ b/crates/net/network/src/peers/manager.rs @@ -298,7 +298,15 @@ impl PeersManager { /// Bans the peer temporarily with the configured ban timeout fn ban_peer(&mut self, peer_id: PeerId) { - self.ban_list.ban_peer_until(peer_id, std::time::Instant::now() + self.ban_duration); + let mut ban_duration = self.ban_duration; + if let Some(peer) = self.peers.get(&peer_id) { + if peer.is_trusted() { + // For misbehaving trusted peers, we provide a bit more leeway when penalizing them. + ban_duration = self.backoff_durations.medium; + } + } + + self.ban_list.ban_peer_until(peer_id, std::time::Instant::now() + ban_duration); self.queued_actions.push_back(PeerAction::BanPeer { peer_id }); }