summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-09-03 11:14:36 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-09-28 12:41:48 +0200
commit044ca243fcc59e511750c5f91780821eb5d7406a (patch)
tree0b4541c529b557c8d944ade1977a9d2878e0c48d
parent3ec74812eb2f52c302009e867f2b30712caf72c4 (diff)
downloadmullvadvpn-044ca243fcc59e511750c5f91780821eb5d7406a.tar.xz
mullvadvpn-044ca243fcc59e511750c5f91780821eb5d7406a.zip
Validate peer endpoints
-rw-r--r--talpid-core/src/tunnel/wireguard/wireguard_nt.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/talpid-core/src/tunnel/wireguard/wireguard_nt.rs b/talpid-core/src/tunnel/wireguard/wireguard_nt.rs
index e2b386b1ed..1302ea3e9e 100644
--- a/talpid-core/src/tunnel/wireguard/wireguard_nt.rs
+++ b/talpid-core/src/tunnel/wireguard/wireguard_nt.rs
@@ -922,16 +922,30 @@ unsafe fn deserialize_config(
let peer: WgPeer = *(peer_data.as_ptr() as *const WgPeer);
tail = new_tail;
+ if let Err(error) = windows::try_socketaddr_from_inet_sockaddr(peer.endpoint.addr) {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Received invalid endpoint address")
+ );
+ return Err(Error::InvalidConfigData);
+ }
+
let mut allowed_ips = vec![];
for _ in 0..peer.allowed_ips_count {
let (allowed_ip_data, new_tail) = tail.split_at(mem::size_of::<WgAllowedIp>());
let allowed_ip: WgAllowedIp = *(allowed_ip_data.as_ptr() as *const WgAllowedIp);
- WgAllowedIp::validate(
+ if let Err(error) = WgAllowedIp::validate(
&allowed_ip.address,
allowed_ip.address_family,
allowed_ip.cidr,
- )?;
+ ) {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Received invalid allowed IP")
+ );
+ return Err(Error::InvalidConfigData);
+ }
tail = new_tail;
allowed_ips.push(allowed_ip);
}