diff --git a/rust/connlib/snownet/src/node.rs b/rust/connlib/snownet/src/node.rs
index c3f76a679..5ba158284 100644
--- a/rust/connlib/snownet/src/node.rs
+++ b/rust/connlib/snownet/src/node.rs
@@ -439,6 +439,19 @@ where
.get_established_mut(&connection)
.ok_or(Error::NotConnected)?;
+ let packet_len = packet.packet().len();
+ let max_len = if self.mode.is_client() {
+ ip_packet::PACKET_SIZE
+ } else {
+ ip_packet::PACKET_SIZE + ip_packet::NAT46_OVERHEAD
+ };
+
+ // TODO: This is a it of a hack, we should compile-time enforce this.
+ if packet_len > max_len {
+ tracing::warn!("Packet is too large; max={max_len}, actual={packet_len}");
+ return Ok(None);
+ }
+
// Encode the packet with an offset of 4 bytes, in case we need to wrap it in a channel-data message.
let Some(packet_len) = conn
.encapsulate(packet.packet(), &mut buffer.inner[4..], now)?
diff --git a/rust/ip-packet/src/lib.rs b/rust/ip-packet/src/lib.rs
index 3ef0e4e6c..85082ac5c 100644
--- a/rust/ip-packet/src/lib.rs
+++ b/rust/ip-packet/src/lib.rs
@@ -37,7 +37,7 @@ pub const MAX_DATAGRAM_PAYLOAD: usize =
/// Wireguard has a 32-byte overhead (4b message type + 4b receiver idx + 8b packet counter + 16b AEAD tag)
const WG_OVERHEAD: usize = 32;
/// In order to do NAT46 without copying, we need 20 extra byte in the buffer (IPv6 packets are 20 byte bigger than IPv4).
-const NAT46_OVERHEAD: usize = 20;
+pub const NAT46_OVERHEAD: usize = 20;
/// TURN's data channels have a 4 byte overhead.
const DATA_CHANNEL_OVERHEAD: usize = 4;
diff --git a/website/src/components/Changelog/Android.tsx b/website/src/components/Changelog/Android.tsx
index 9cee6d744..98a60fb82 100644
--- a/website/src/components/Changelog/Android.tsx
+++ b/website/src/components/Changelog/Android.tsx
@@ -11,7 +11,11 @@ export default function Android() {
title="Android"
>
{/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */}
-
+
+
+ Mitigates a crash in case the maximum packet size is not respected.
+
+
Handles DNS queries over TCP correctly.
diff --git a/website/src/components/Changelog/Apple.tsx b/website/src/components/Changelog/Apple.tsx
index f6a69c1d0..f470f1701 100644
--- a/website/src/components/Changelog/Apple.tsx
+++ b/website/src/components/Changelog/Apple.tsx
@@ -11,7 +11,11 @@ export default function Apple() {
title="macOS / iOS"
>
{/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */}
-
+
+
+ Mitigates a crash in case the maximum packet size is not respected.
+
+
Handles DNS queries over TCP correctly.
diff --git a/website/src/components/Changelog/GUI.tsx b/website/src/components/Changelog/GUI.tsx
index 260f11457..311ed2fb5 100644
--- a/website/src/components/Changelog/GUI.tsx
+++ b/website/src/components/Changelog/GUI.tsx
@@ -14,7 +14,9 @@ export default function GUI({ title }: { title: string }) {
return (
{/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */}
-
+
+ Mitigates a crash in case the maximum packet size is not respected.
+
Handles DNS queries over TCP correctly.
diff --git a/website/src/components/Changelog/Gateway.tsx b/website/src/components/Changelog/Gateway.tsx
index 5c0294202..f4937ffd4 100644
--- a/website/src/components/Changelog/Gateway.tsx
+++ b/website/src/components/Changelog/Gateway.tsx
@@ -10,6 +10,11 @@ export default function Gateway() {
return (
+
+
+ Mitigates a crash in case the maximum packet size is not respected.
+
+
Separates traffic restrictions between DNS Resources CIDR Resources,
diff --git a/website/src/components/Changelog/Headless.tsx b/website/src/components/Changelog/Headless.tsx
index f981aef38..01a745766 100644
--- a/website/src/components/Changelog/Headless.tsx
+++ b/website/src/components/Changelog/Headless.tsx
@@ -11,7 +11,11 @@ export default function Headless() {
return (
{/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */}
-
+
+
+ Mitigates a crash in case the maximum packet size is not respected.
+
+
Handles DNS queries over TCP correctly.