Skip to content

Commit 17af8d5

Browse files
committed
Add NetworkGraph reference to DefaultMessageRouter
When buffering onion messages for a node that is not connected as a peer, it's possible that the node does not exist. Include a NetworkGraph reference in DefaultMessageRouter so that it can be used to check if the node actually exists. Otherwise, an malicious node may send an onion message where the reply path's introduction node doesn't exist. This would result in buffering messages that may never be delivered.
1 parent ddee928 commit 17af8d5

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

lightning/src/onion_message/messenger.rs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use crate::ln::features::{InitFeatures, NodeFeatures};
2525
use crate::ln::msgs::{self, OnionMessage, OnionMessageHandler};
2626
use crate::ln::onion_utils;
2727
use crate::ln::peer_handler::IgnoringMessageHandler;
28+
use crate::routing::gossip::NetworkGraph;
2829
pub use super::packet::OnionMessageContents;
2930
use super::packet::ParsedOnionMessageContents;
3031
use super::offers::OffersMessageHandler;
@@ -256,9 +257,27 @@ pub trait MessageRouter {
256257
}
257258

258259
/// A [`MessageRouter`] that can only route to a directly connected [`Destination`].
259-
pub struct DefaultMessageRouter;
260+
pub struct DefaultMessageRouter<G: Deref<Target=NetworkGraph<L>>, L: Deref>
261+
where
262+
L::Target: Logger,
263+
{
264+
network_graph: G,
265+
}
260266

261-
impl MessageRouter for DefaultMessageRouter {
267+
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> DefaultMessageRouter<G, L>
268+
where
269+
L::Target: Logger,
270+
{
271+
/// Creates a [`DefaultMessageRouter`] using the given [`NetworkGraph`].
272+
pub fn new(network_graph: G) -> Self {
273+
Self { network_graph }
274+
}
275+
}
276+
277+
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> MessageRouter for DefaultMessageRouter<G, L>
278+
where
279+
L::Target: Logger,
280+
{
262281
fn find_path(
263282
&self, _sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
264283
) -> Result<OnionMessagePath, ()> {
@@ -878,7 +897,7 @@ pub type SimpleArcOnionMessenger<M, T, F, L> = OnionMessenger<
878897
Arc<KeysManager>,
879898
Arc<KeysManager>,
880899
Arc<L>,
881-
Arc<DefaultMessageRouter>,
900+
Arc<DefaultMessageRouter<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>,
882901
Arc<SimpleArcChannelManager<M, T, F, L>>,
883902
IgnoringMessageHandler
884903
>;
@@ -897,7 +916,7 @@ pub type SimpleRefOnionMessenger<
897916
&'a KeysManager,
898917
&'a KeysManager,
899918
&'b L,
900-
&'i DefaultMessageRouter,
919+
&'i DefaultMessageRouter<&'g NetworkGraph<&'b L>, &'b L>,
901920
&'j SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L>,
902921
IgnoringMessageHandler
903922
>;

0 commit comments

Comments
 (0)