fix panic when wireguard tunnel encounter udp recv error (#299)

This commit is contained in:
Sijie.Sun
2024-09-02 09:37:34 +08:00
committed by GitHub
parent f07b3ee9c6
commit 1609c97574
2 changed files with 16 additions and 3 deletions

View File

@@ -634,7 +634,14 @@ impl WgTunnelConnector {
let handshake = wg_peer.create_handshake_init().await;
udp.send_to(&handshake, addr).await?;
let mut buf = [0u8; MAX_PACKET];
let (n, recv_addr) = udp.recv_from(&mut buf).await.unwrap();
let (n, recv_addr) = match udp.recv_from(&mut buf).await {
Ok(ret) => ret,
Err(e) => {
tracing::error!("Failed to receive handshake response: {}", e);
return Err(TunnelError::IOError(e));
}
};
if recv_addr != addr {
tracing::warn!(?recv_addr, "Received packet from changed address");
}
@@ -646,7 +653,13 @@ impl WgTunnelConnector {
data.handle_one_packet_from_peer(&mut sink, &buf[..n]).await;
loop {
let mut buf = vec![0u8; MAX_PACKET];
let (n, _) = data.udp.recv_from(&mut buf).await.unwrap();
let (n, _) = match udp.recv_from(&mut buf).await {
Ok(ret) => ret,
Err(e) => {
tracing::error!("Failed to receive wg packet: {}", e);
break;
}
};
data.handle_one_packet_from_peer(&mut sink, &buf[..n]).await;
}
});