Skip to content

Commit f012f90

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 1f5fb57 commit f012f90

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;
@@ -254,9 +255,27 @@ pub trait MessageRouter {
254255
}
255256

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

259-
impl MessageRouter for DefaultMessageRouter {
265+
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> DefaultMessageRouter<G, L>
266+
where
267+
L::Target: Logger,
268+
{
269+
/// Creates a [`DefaultMessageRouter`] using the given [`NetworkGraph`].
270+
pub fn new(network_graph: G) -> Self {
271+
Self { network_graph }
272+
}
273+
}
274+
275+
impl<G: Deref<Target=NetworkGraph<L>>, L: Deref> MessageRouter for DefaultMessageRouter<G, L>
276+
where
277+
L::Target: Logger,
278+
{
260279
fn find_path(
261280
&self, _sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
262281
) -> Result<OnionMessagePath, ()> {
@@ -853,7 +872,7 @@ pub type SimpleArcOnionMessenger<M, T, F, L> = OnionMessenger<
853872
Arc<KeysManager>,
854873
Arc<KeysManager>,
855874
Arc<L>,
856-
Arc<DefaultMessageRouter>,
875+
Arc<DefaultMessageRouter<Arc<NetworkGraph<Arc<L>>>, Arc<L>>>,
857876
Arc<SimpleArcChannelManager<M, T, F, L>>,
858877
IgnoringMessageHandler
859878
>;
@@ -872,7 +891,7 @@ pub type SimpleRefOnionMessenger<
872891
&'a KeysManager,
873892
&'a KeysManager,
874893
&'b L,
875-
&'i DefaultMessageRouter,
894+
&'i DefaultMessageRouter<&'g NetworkGraph<&'b L>, &'b L>,
876895
&'j SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, M, T, F, L>,
877896
IgnoringMessageHandler
878897
>;

0 commit comments

Comments
 (0)