From: Matt Corallo Date: Thu, 22 Mar 2018 21:40:53 +0000 (-0400) Subject: Check validity of dust_limit_satoshis in remote messages X-Git-Tag: v0.0.12~418^2 X-Git-Url: http://git.bitcoin.ninja/?a=commitdiff_plain;h=refs%2Fheads%2F2018-03-fuzz-fixes-1;p=rust-lightning Check validity of dust_limit_satoshis in remote messages --- diff --git a/src/ln/channel.rs b/src/ln/channel.rs index bf778815e..2b8b085a8 100644 --- a/src/ln/channel.rs +++ b/src/ln/channel.rs @@ -366,7 +366,9 @@ impl Channel { if msg.push_msat > (msg.funding_satoshis - msg.channel_reserve_satoshis) * 1000 { return Err(HandleError{err: "push_msat more than highest possible value", msg: None}); } - //TODO Check if dust_limit is sane? + if msg.dust_limit_satoshis > 21000000 * 100000000 { + return Err(HandleError{err: "Peer never wants payout outputs?", msg: None}); + } if msg.max_htlc_value_in_flight_msat > msg.funding_satoshis * 1000 { return Err(HandleError{err: "Bogus max_htlc_value_in_flight_satoshis", msg: None}); } @@ -826,13 +828,15 @@ impl Channel { pub fn accept_channel(&mut self, msg: &msgs::AcceptChannel) -> Result<(), HandleError> { // Check sanity of message fields: - //TODO Check if dust_limit is sane? if !self.channel_outbound { return Err(HandleError{err: "Got an accept_channel message from an inbound peer", msg: None}); } if self.channel_state != ChannelState::OurInitSent as u32 { return Err(HandleError{err: "Got an accept_channel message at a strange time", msg: None}); } + if msg.dust_limit_satoshis > 21000000 * 100000000 { + return Err(HandleError{err: "Peer never wants payout outputs?", msg: None}); + } if msg.max_htlc_value_in_flight_msat > self.channel_value_satoshis * 1000 { return Err(HandleError{err: "Bogus max_htlc_value_in_flight_satoshis", msg: None}); }