Message ID | 20190222125457.8509-1-maximmi@mellanox.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: Skip GSO length estimation if transport header is not set | expand |
On Fri, Feb 22, 2019 at 7:56 AM Maxim Mikityanskiy <maximmi@mellanox.com> wrote: > > 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>
From: Maxim Mikityanskiy <maximmi@mellanox.com> Date: Fri, 22 Feb 2019 12:55:22 +0000 > 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> Applied, thanks Maxim.
diff --git a/net/core/dev.c b/net/core/dev.c index a3d13f5e2bfc..8a0da95ff4cc 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3421,7 +3421,7 @@ static void qdisc_pkt_len_init(struct sk_buff *skb) /* To get more precise estimation of bytes sent on wire, * we add to pkt_len the headers size of all segments */ - if (shinfo->gso_size) { + if (shinfo->gso_size && skb_transport_header_was_set(skb)) { unsigned int hdr_len; u16 gso_segs = shinfo->gso_segs;
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> --- net/core/dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)