Skip to content

Commit cddcbbc

Browse files
committed
fix: Use a separate lock for the ephemeral_key_midstate
Use a separate lock to generate the SecretKey instead of overloading the PeerHolder mutex. Refactoring PeerManager removed this hidden constraint and this should make it more robust in the future.
1 parent 8686fea commit cddcbbc

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

lightning/src/ln/peers/handler.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ struct PeerManagerImpl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: De
359359
message_handler: MessageHandler<CM, RM>,
360360
peers: Mutex<PeerHolder<Descriptor, TransportImpl>>,
361361
our_node_secret: SecretKey,
362-
ephemeral_key_midstate: Sha256Engine,
362+
ephemeral_key_midstate: Mutex<Sha256Engine>,
363363

364364
// Usize needs to be at least 32 bits to avoid overflowing both low and high. If usize is 64
365365
// bits we will never realistically count into high:
@@ -512,7 +512,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
512512
node_id_to_descriptor: HashMap::new()
513513
}),
514514
our_node_secret,
515-
ephemeral_key_midstate,
515+
ephemeral_key_midstate: Mutex::new(ephemeral_key_midstate),
516516
peer_counter_low: AtomicUsize::new(0),
517517
peer_counter_high: AtomicUsize::new(0),
518518
logger,
@@ -525,7 +525,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, TransportImpl
525525
}
526526

527527
fn get_ephemeral_key(&self) -> SecretKey {
528-
let mut ephemeral_hash = self.ephemeral_key_midstate.clone();
528+
let mut ephemeral_hash = self.ephemeral_key_midstate.lock().unwrap().clone();
529529
let low = self.peer_counter_low.fetch_add(1, Ordering::AcqRel);
530530
let high = if low == 0 {
531531
self.peer_counter_high.fetch_add(1, Ordering::AcqRel)

0 commit comments

Comments
 (0)