CVE-2026-98557: gve: DQO: fix header length used by gve_can_send_tso() for UDP GSO
In the Linux kernel, the following vulnerability has been resolved:
gve: DQO: fix header length used by gvecansendtso() for UDP GSO
gvecansendtso() computes how many buffers each segment of a GSO packet would span, and for this it needs the length of the headers that the device replicates in front of every segment.
It unconditionally uses skbtcpallheaders(), which reads the doff field of the TCP header. SKBGSOUDPL4 packets have no TCP header: tcphdrlen() then reads one byte of the UDP payload, and headerlen can be anything in [0, 60] instead of the transport offset plus the eight bytes of the UDP header that gvepreptso() programs into the TSO context descriptor.
A wrong header length shifts all the segment boundaries computed in the loop, so the number of buffers per segment can be over or under estimated. In the first case, GSO is needlessly disabled for this packet by gvefeaturescheckdqo() and the stack has to segment it. In the second case, the driver hands the device a packet whose segments span more than GVETXMAXDATADESCS buffers.
Use the UDP header length for SKBGSOUDPL4 packets, matching what gvepreptso() does.