]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gue: validate REMCSUM private option length
authorQihang <q.h.hack.winter@gmail.com>
Wed, 1 Jul 2026 02:26:17 +0000 (10:26 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 3 Jul 2026 08:34:53 +0000 (09:34 +0100)
GUE private flags can indicate that remote checksum offload metadata is
present. The private flags field itself is accounted for by
guehdr_flags_len(), but guehdr_priv_flags_len() currently returns 0 even
when GUE_PFLAG_REMCSUM is set.

This lets a packet with only the private flags field pass
validate_gue_flags(), after which gue_remcsum() and gue_gro_remcsum()
read the missing REMCSUM start/offset fields from the following bytes.

Account for GUE_PLEN_REMCSUM when GUE_PFLAG_REMCSUM is present so that
malformed packets are rejected during option validation.

Fixes: c1aa8347e73e ("gue: Protocol constants for remote checksum offload")
Signed-off-by: Qihang <q.h.hack.winter@gmail.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/gue.h

index dfca298bec9ccd0ee99fb3826d2cc1da2028eb55..caefd6da86939b4c1d9702a84860fe2de2c46697 100644 (file)
@@ -80,7 +80,7 @@ static inline size_t guehdr_flags_len(__be16 flags)
 
 static inline size_t guehdr_priv_flags_len(__be32 flags)
 {
-       return 0;
+       return (flags & GUE_PFLAG_REMCSUM) ? GUE_PLEN_REMCSUM : 0;
 }
 
 /* Validate standard and private flags. Returns non-zero (meaning invalid)