lkml.org 
[lkml]   [2020]   [Dec]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.10 063/217] net: skb_vlan_untag(): don't reset transport offset if set by GRO layer
    Date
    From: Alexander Lobakin <alobakin@pm.me>

    [ Upstream commit 8be33ecfc1ffd2da20cc29e957e4cb6eb99310cb ]

    Similar to commit fda55eca5a33f
    ("net: introduce skb_transport_header_was_set()"), avoid resetting
    transport offsets that were already set by GRO layer. This not only
    mirrors the behavior of __netif_receive_skb_core(), but also makes
    sense when it comes to UDP GSO fraglists forwarding: transport offset
    of such skbs is set only once by GRO receive callback and remains
    untouched and correct up to the xmitting driver in 1:1 case, but
    becomes junk after untagging in ingress VLAN case and breaks UDP
    GSO offload. This does not happen after this change, and all types
    of forwarding of UDP GSO fraglists work as expected.

    Since v1 [1]:
    - keep the code 1:1 with __netif_receive_skb_core() (Jakub).

    [1] https://lore.kernel.org/netdev/zYurwsZRN7BkqSoikWQLVqHyxz18h4LhHU4NFa2Vw@cp4-web-038.plabs.ch

    Signed-off-by: Alexander Lobakin <alobakin@pm.me>
    Link: https://lore.kernel.org/r/7JgIkgEztzt0W6ZtC9V9Cnk5qfkrUFYcpN871syCi8@cp4-web-040.plabs.ch
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/core/skbuff.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/net/core/skbuff.c b/net/core/skbuff.c
    index e578544b2cc71..08d69e062eca6 100644
    --- a/net/core/skbuff.c
    +++ b/net/core/skbuff.c
    @@ -5430,7 +5430,8 @@ struct sk_buff *skb_vlan_untag(struct sk_buff *skb)
    goto err_free;

    skb_reset_network_header(skb);
    - skb_reset_transport_header(skb);
    + if (!skb_transport_header_was_set(skb))
    + skb_reset_transport_header(skb);
    skb_reset_mac_len(skb);

    return skb;
    --
    2.27.0
    \
     
     \ /
      Last update: 2020-12-23 04:09    [W:4.271 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site