mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-13 21:27:25 +08:00
fix panic when wireguard tunnel encounter udp recv error (#299)
This commit is contained in:
@@ -91,7 +91,7 @@ impl GlobalCtx {
|
|||||||
let net_ns = NetNS::new(config_fs.get_netns());
|
let net_ns = NetNS::new(config_fs.get_netns());
|
||||||
let hostname = config_fs.get_hostname();
|
let hostname = config_fs.get_hostname();
|
||||||
|
|
||||||
let (event_bus, _) = tokio::sync::broadcast::channel(100);
|
let (event_bus, _) = tokio::sync::broadcast::channel(1024);
|
||||||
|
|
||||||
let stun_info_collection = Arc::new(StunInfoCollector::new_with_default_servers());
|
let stun_info_collection = Arc::new(StunInfoCollector::new_with_default_servers());
|
||||||
|
|
||||||
|
|||||||
@@ -634,7 +634,14 @@ impl WgTunnelConnector {
|
|||||||
let handshake = wg_peer.create_handshake_init().await;
|
let handshake = wg_peer.create_handshake_init().await;
|
||||||
udp.send_to(&handshake, addr).await?;
|
udp.send_to(&handshake, addr).await?;
|
||||||
let mut buf = [0u8; MAX_PACKET];
|
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 {
|
if recv_addr != addr {
|
||||||
tracing::warn!(?recv_addr, "Received packet from changed address");
|
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;
|
data.handle_one_packet_from_peer(&mut sink, &buf[..n]).await;
|
||||||
loop {
|
loop {
|
||||||
let mut buf = vec![0u8; MAX_PACKET];
|
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;
|
data.handle_one_packet_from_peer(&mut sink, &buf[..n]).await;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user