From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: Re: [PATCH bpf-next 09/10] [bpf]: make tun compatible w/ bpf_xdp_adjust_tail Date: Wed, 18 Apr 2018 10:16:25 +0800 Message-ID: <8886428a-a358-720b-65ba-0e580da6c2ef@redhat.com> References: <20180417065131.3632-1-tehnerd@tehnerd.com> <20180417065131.3632-10-tehnerd@tehnerd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Cc: netdev@vger.kernel.org To: "Nikita V. Shirokov" , Alexei Starovoitov , Daniel Borkmann , mst@redhat.com Return-path: Received: from mx3-rdu2.redhat.com ([66.187.233.73]:49092 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753175AbeDRCQb (ORCPT ); Tue, 17 Apr 2018 22:16:31 -0400 In-Reply-To: <20180417065131.3632-10-tehnerd@tehnerd.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 2018年04月17日 14:51, Nikita V. Shirokov wrote: > w/ bpf_xdp_adjust_tail helper xdp's data_end pointer could be changed as > well (only "decrease" of pointer's location is going to be supported). > changing of this pointer will change packet's size. > for tun driver we need to adjust XDP_PASS handling by recalculating > length of the packet if it was passed to the TCP/IP stack > (in case if after xdp's prog run data_end pointer was adjusted) > > Signed-off-by: Nikita V. Shirokov > --- > drivers/net/tun.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/tun.c b/drivers/net/tun.c > index 28583aa0c17d..0b488a958076 100644 > --- a/drivers/net/tun.c > +++ b/drivers/net/tun.c > @@ -1688,6 +1688,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun, > return NULL; > case XDP_PASS: > delta = orig_data - xdp.data; > + len = xdp.data_end - xdp.data; > break; > default: > bpf_warn_invalid_xdp_action(act); > @@ -1708,7 +1709,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun, > } > > skb_reserve(skb, pad - delta); > - skb_put(skb, len + delta); > + skb_put(skb, len); > get_page(alloc_frag->page); > alloc_frag->offset += buflen; > Reviewed-by: Jason Wang