lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 28 Jun 2021 14:05:42 -0700
From:   Alexander Duyck <alexander.duyck@...il.com>
To:     Lorenzo Bianconi <lorenzo@...nel.org>
Cc:     bpf <bpf@...r.kernel.org>, Netdev <netdev@...r.kernel.org>,
        lorenzo.bianconi@...hat.com, David Miller <davem@...emloft.net>,
        Jakub Kicinski <kuba@...nel.org>,
        Alexei Starovoitov <ast@...nel.org>,
        Daniel Borkmann <daniel@...earbox.net>, shayagr@...zon.com,
        "Jubran, Samih" <sameehj@...zon.com>,
        John Fastabend <john.fastabend@...il.com>,
        David Ahern <dsahern@...nel.org>,
        Jesper Dangaard Brouer <brouer@...hat.com>,
        Eelco Chaudron <echaudro@...hat.com>,
        Jason Wang <jasowang@...hat.com>,
        Saeed Mahameed <saeed@...nel.org>,
        Maciej Fijalkowski <maciej.fijalkowski@...el.com>,
        "Karlsson, Magnus" <magnus.karlsson@...el.com>,
        Tirthendu <tirthendu.sarkar@...el.com>
Subject: Re: [PATCH v9 bpf-next 07/14] net: xdp: add multi-buff support to xdp_build_skb_from_frame

On Mon, Jun 14, 2021 at 5:51 AM Lorenzo Bianconi <lorenzo@...nel.org> wrote:
>
> Introduce xdp multi-buff support to
> __xdp_build_skb_from_frame/xdp_build_skb_from_frame
> utility routines.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo@...nel.org>
> ---
>  net/core/xdp.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/net/core/xdp.c b/net/core/xdp.c
> index f61c63115c95..71bedf6049a1 100644
> --- a/net/core/xdp.c
> +++ b/net/core/xdp.c
> @@ -582,9 +582,15 @@ struct sk_buff *__xdp_build_skb_from_frame(struct xdp_frame *xdpf,
>                                            struct sk_buff *skb,
>                                            struct net_device *dev)
>  {
> +       struct skb_shared_info *sinfo = xdp_get_shared_info_from_frame(xdpf);
>         unsigned int headroom, frame_size;
> +       int i, num_frags = 0;
>         void *hard_start;
>
> +       /* xdp multi-buff frame */
> +       if (unlikely(xdp_frame_is_mb(xdpf)))
> +               num_frags = sinfo->nr_frags;
> +
>         /* Part of headroom was reserved to xdpf */
>         headroom = sizeof(*xdpf) + xdpf->headroom;
>
> @@ -603,6 +609,13 @@ struct sk_buff *__xdp_build_skb_from_frame(struct xdp_frame *xdpf,
>         if (xdpf->metasize)
>                 skb_metadata_set(skb, xdpf->metasize);
>
> +       for (i = 0; i < num_frags; i++)
> +               skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
> +                               skb_frag_page(&sinfo->frags[i]),
> +                               skb_frag_off(&sinfo->frags[i]),
> +                               skb_frag_size(&sinfo->frags[i]),
> +                               xdpf->frame_sz);
> +

So this is assuming the header frame and all of the frags are using
the same size. Rather than reading the frags out and then writing them
back, why not just directly rewrite the nr_frags, add the total size
to skb->len and skb->data_len, and then update the truesize?

Actually, I think you might need to store the truesize somewhere in
addition to the data_len that you were storing in the shared info.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ