lkml.org 
[lkml]   [2020]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 497/639] net: fix bpf_xdp_adjust_head regression for generic-XDP
    Date
    From: Jesper Dangaard Brouer <brouer@redhat.com>

    [ Upstream commit 065af355470519bd184019a93ac579f22b036045 ]

    When generic-XDP was moved to a later processing step by commit
    458bf2f224f0 ("net: core: support XDP generic on stacked devices.")
    a regression was introduced when using bpf_xdp_adjust_head.

    The issue is that after this commit the skb->network_header is now
    changed prior to calling generic XDP and not after. Thus, if the header
    is changed by XDP (via bpf_xdp_adjust_head), then skb->network_header
    also need to be updated again. Fix by calling skb_reset_network_header().

    Fixes: 458bf2f224f0 ("net: core: support XDP generic on stacked devices.")
    Reported-by: Brandon Cazander <brandon.cazander@multapplied.net>
    Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/core/dev.c | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    diff --git a/net/core/dev.c b/net/core/dev.c
    index 935fe158cfaff..73ebacabfde8d 100644
    --- a/net/core/dev.c
    +++ b/net/core/dev.c
    @@ -4349,12 +4349,17 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb,

    act = bpf_prog_run_xdp(xdp_prog, xdp);

    + /* check if bpf_xdp_adjust_head was used */
    off = xdp->data - orig_data;
    - if (off > 0)
    - __skb_pull(skb, off);
    - else if (off < 0)
    - __skb_push(skb, -off);
    - skb->mac_header += off;
    + if (off) {
    + if (off > 0)
    + __skb_pull(skb, off);
    + else if (off < 0)
    + __skb_push(skb, -off);
    +
    + skb->mac_header += off;
    + skb_reset_network_header(skb);
    + }

    /* check if bpf_xdp_adjust_tail was used. it can only "shrink"
    * pckt.
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-01-24 12:29    [W:3.734 / U:0.648 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site