Merge branch 'fix/net-event-id-tocttou' into feature/net-p2p-pingback

This commit is contained in:
Jude Nelson
2020-05-12 21:29:54 -04:00
3 changed files with 15 additions and 11 deletions

View File

@@ -1139,27 +1139,32 @@ impl PeerNetwork {
let event_id = match self.network {
Some(ref mut network) => {
// add to poller
match network.register(self.p2p_network_handle, hint_event_id, &client_sock) {
let event_id = match network.register(self.p2p_network_handle, hint_event_id, &client_sock) {
Ok(event_id) => event_id,
Err(e) => {
warn!("Failed to register {:?}: {:?}", &client_sock, &e);
continue;
}
};
// event ID already used?
if self.peers.contains_key(&event_id) {
warn!("Already have an event {}: {:?}", event_id, self.peers.get(&event_id));
let _ = network.deregister(event_id, &client_sock);
continue;
}
event_id
},
None => {
test_debug!("{:?}: network not connected", &self.local_peer);
return Err(net_error::NotConnected);
}
};
// event ID already used?
if self.peers.contains_key(&event_id) {
continue;
}
// start tracking it
if let Err(_e) = self.register_peer(event_id, client_sock, false) {
// NOTE: register_peer will deregister the socket for us
continue;
}
registered.push(event_id);

View File

@@ -182,8 +182,7 @@ impl NetworkState {
}
else {
// not a server event
error!("Not a server event ID: {}", &server_event_id);
return Err(net_error::RegisterError);
panic!("Not a server event ID: {}", &server_event_id);
}
// if the event ID is in use, then find another one
@@ -436,9 +435,6 @@ mod test {
// can't use non-server events
assert_eq!(Err(net_error::RegisterError), ns.register(client_events[port - 49010], port - 49010 + 1, &sock));
// can'te use non-registered events
assert_eq!(Err(net_error::RegisterError), ns.register(99, port - 49010 + 1, &sock));
}
}
}

View File

@@ -313,10 +313,13 @@ impl HttpPeer {
// event ID already used?
if self.peers.contains_key(&event_id) {
warn!("Already have an event {}: {:?}", event_id, self.peers.get(&event_id));
let _ = network_state.deregister(event_id, &client_sock);
continue;
}
if let Err(_e) = self.register_http(network_state, chainstate, event_id, client_sock, None, None) {
// NOTE: register_http will deregister the socket for us
continue;
}
registered.push(event_id);