From d67994c56173c238f19dec691c635297c26da09b Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Tue, 18 Feb 2020 00:29:37 +0100 Subject: [PATCH] Fix potential panics related to time (#4951) * Fix potential peerset panic at initialization * Also fix legacy_proto/behaviour.rs --- .../network/src/protocol/legacy_proto/behaviour.rs | 10 ++++++---- substrate/client/peerset/src/lib.rs | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/substrate/client/network/src/protocol/legacy_proto/behaviour.rs b/substrate/client/network/src/protocol/legacy_proto/behaviour.rs index 704b4947ed..69c89be9a3 100644 --- a/substrate/client/network/src/protocol/legacy_proto/behaviour.rs +++ b/substrate/client/network/src/protocol/legacy_proto/behaviour.rs @@ -379,12 +379,14 @@ impl LegacyProto { } }; + let now = Instant::now(); + match mem::replace(occ_entry.get_mut(), PeerState::Poisoned) { - PeerState::Banned { ref until } if *until > Instant::now() => { + PeerState::Banned { ref until } if *until > now => { debug!(target: "sub-libp2p", "PSM => Connect({:?}): Will start to connect at \ until {:?}", occ_entry.key(), until); *occ_entry.into_mut() = PeerState::PendingRequest { - timer: futures_timer::Delay::new(until.clone() - Instant::now()), + timer: futures_timer::Delay::new(until.clone() - now), timer_deadline: until.clone(), }; }, @@ -397,13 +399,13 @@ impl LegacyProto { }, PeerState::Disabled { open, ref connected_point, banned_until: Some(ref banned) } - if *banned > Instant::now() => { + if *banned > now => { debug!(target: "sub-libp2p", "PSM => Connect({:?}): Has idle connection through \ {:?} but node is banned until {:?}", occ_entry.key(), connected_point, banned); *occ_entry.into_mut() = PeerState::DisabledPendingEnable { connected_point: connected_point.clone(), open, - timer: futures_timer::Delay::new(banned.clone() - Instant::now()), + timer: futures_timer::Delay::new(banned.clone() - now), timer_deadline: banned.clone(), }; }, diff --git a/substrate/client/peerset/src/lib.rs b/substrate/client/peerset/src/lib.rs index bd2b6bb110..fb91f1fcf6 100644 --- a/substrate/client/peerset/src/lib.rs +++ b/substrate/client/peerset/src/lib.rs @@ -199,14 +199,16 @@ impl Peerset { tx: tx.clone(), }; + let now = Instant::now(); + let mut peerset = Peerset { data: peersstate::PeersState::new(config.in_peers, config.out_peers, config.reserved_only), tx, rx, reserved_only: config.reserved_only, message_queue: VecDeque::new(), - created: Instant::now(), - latest_time_update: Instant::now(), + created: now, + latest_time_update: now, }; peerset.data.set_priority_group(RESERVED_NODES, config.reserved_nodes.into_iter().collect());