Transmit a computed-zero UDP checksum as all ones (#1823)

yum yum
This commit is contained in:
Nate Brown
2026-07-24 19:25:49 -05:00
committed by GitHub
parent 9688d32f5b
commit 6bf424f749
2 changed files with 103 additions and 1 deletions
+6 -1
View File
@@ -421,7 +421,12 @@ func FinishChecksum(seg []byte, hdr Hdr) error {
partial := binary.BigEndian.Uint16(seg[cs+co : cs+co+2])
seg[cs+co] = 0
seg[cs+co+1] = 0
binary.BigEndian.PutUint16(seg[cs+co:cs+co+2], ^checksum.Checksum(seg[cs:], partial))
csum := ^checksum.Checksum(seg[cs:], partial)
// RFC 768: UDP transmits a computed zero as all ones, since all-zero is the reserved "no checksum" value.
if co == udpChecksumOff && csum == 0 {
csum = 0xffff
}
binary.BigEndian.PutUint16(seg[cs+co:cs+co+2], csum)
return nil
}