lkml.org 
[lkml]   [2022]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 138/231] seg6: bpf: fix skb checksum in bpf_push_seg6_encap()
    Date
    From: Andrea Mayer <andrea.mayer@uniroma2.it>

    [ Upstream commit 4889fbd98deaf243c3baadc54e296d71c6af1eb0 ]

    Both helper functions bpf_lwt_seg6_action() and bpf_lwt_push_encap() use
    the bpf_push_seg6_encap() to encapsulate the packet in an IPv6 with Segment
    Routing Header (SRH) or insert an SRH between the IPv6 header and the
    payload.
    To achieve this result, such helper functions rely on bpf_push_seg6_encap()
    which, in turn, leverages seg6_do_srh_{encap,inline}() to perform the
    required operation (i.e. encap/inline).

    This patch removes the initialization of the IPv6 header payload length
    from bpf_push_seg6_encap(), as it is now handled properly by
    seg6_do_srh_{encap,inline}() to prevent corruption of the skb checksum.

    Fixes: fe94cc290f53 ("bpf: Add IPv6 Segment Routing helpers")
    Signed-off-by: Andrea Mayer <andrea.mayer@uniroma2.it>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/core/filter.c | 1 -
    1 file changed, 1 deletion(-)

    diff --git a/net/core/filter.c b/net/core/filter.c
    index af1e77f2f24a..6391c1885bca 100644
    --- a/net/core/filter.c
    +++ b/net/core/filter.c
    @@ -6148,7 +6148,6 @@ static int bpf_push_seg6_encap(struct sk_buff *skb, u32 type, void *hdr, u32 len
    if (err)
    return err;

    - ipv6_hdr(skb)->payload_len = htons(skb->len - sizeof(struct ipv6hdr));
    skb_set_transport_header(skb, sizeof(struct ipv6hdr));

    return seg6_lookup_nexthop(skb, NULL, 0);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-19 15:03    [W:4.265 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site