Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: Skip GSO length estimation if transport header is not set

qdisc_pkt_len_init expects transport_header to be set for GSO packets.
Patch [1] skips transport_header validation for GSO packets that don't
have network_header set at the moment of calling virtio_net_hdr_to_skb,
and allows them to pass into the stack. After patch [2] no placeholder
value is assigned to transport_header if dissection fails, so this patch
adds a check to the place where the value of transport_header is used.

[1] https://patchwork.ozlabs.org/patch/1044429/
[2] https://patchwork.ozlabs.org/patch/1046122/

Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Maxim Mikityanskiy and committed by
David S. Miller
a0dce875 0a6c33e8

+1 -1
+1 -1
net/core/dev.c
··· 3421 3421 /* To get more precise estimation of bytes sent on wire, 3422 3422 * we add to pkt_len the headers size of all segments 3423 3423 */ 3424 - if (shinfo->gso_size) { 3424 + if (shinfo->gso_size && skb_transport_header_was_set(skb)) { 3425 3425 unsigned int hdr_len; 3426 3426 u16 gso_segs = shinfo->gso_segs; 3427 3427