]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix handling of large XSK frames 16242/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 7 Oct 2025 11:34:49 +0000 (13:34 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 10 Oct 2025 09:53:43 +0000 (11:53 +0200)
There was a bug in the way we were computing the remaining capacity
of a XSK frame, because we forgot to account for the network headers.
This caused some XSK responses to be discarded by the kernel (`tx_invalid_descs`)
because there was not enough space left in the frame (less than
`XDP_PACKET_HEADROOM`).

Thanks to `ednaq` for reporting this via ou YesWeHack program.

Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/xsk.cc

index d246a1d72e833794487b4573fe70610f8aa9c806..5e6eb4c7aafec4e02300ebafebce736c892661c0 100644 (file)
@@ -709,7 +709,7 @@ uint32_t XskPacket::getFrameLen() const noexcept
 
 size_t XskPacket::getCapacity() const noexcept
 {
-  return frameSize;
+  return frameSize - getDataOffset();
 }
 
 void XskPacket::changeDirectAndUpdateChecksum() noexcept