From patchwork Wed Apr 18 04:29:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Nikita V. Shirokov" X-Patchwork-Id: 899916 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=tehnerd.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=tehnerd-com.20150623.gappssmtp.com header.i=@tehnerd-com.20150623.gappssmtp.com header.b="eI0NxWh0"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40Qs7h61Wmz9s1v for ; Wed, 18 Apr 2018 16:06:24 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752903AbeDRGGX (ORCPT ); Wed, 18 Apr 2018 02:06:23 -0400 Received: from mail-pl0-f54.google.com ([209.85.160.54]:39517 "EHLO mail-pl0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752769AbeDRGF4 (ORCPT ); Wed, 18 Apr 2018 02:05:56 -0400 Received: by mail-pl0-f54.google.com with SMTP id e7-v6so457352plt.6 for ; Tue, 17 Apr 2018 23:05:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tehnerd-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=a3YmdN++SwJGjh5f0ozW961EsicnsbBr8sv42WMlENI=; b=eI0NxWh00M1yKVREJtcnPpl7N7QPIOsYIohW3DjAusq6fdseNTYB0uoBTw6KV4Cil6 TsgnYp3e+aksvwFh/95O0OVaxL75ugWGk9UXTIQ/kX3INrL/4FLB1sjebeJGtr66SIcg Re2naRGoyyjoJBlvkzfLAmiakLx74lenf3AyV0cJvLNGcKTsAMr33hLosClWSGc/4QZN hNwGw0WGN9dtHu/tzvmAWZN/0oQ+/AJ/I+1OVD8dTfPBaFEo/u0Uk37f7a2wjqri97tK NcMGZ5jhnG11Qp3UvejVx8qLShnx50d6pR0w0d1c9nQTkrmnX4J2vqd3flg9LaIw8Mnq Nvyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=a3YmdN++SwJGjh5f0ozW961EsicnsbBr8sv42WMlENI=; b=Gr7Hi83TERzoqMC5ypfqdU6WxqyX4h3gPJFB0cYmR0spxSwfF4RZPBBIhDqok9iDCx X6iDfNtAlM0rDsgdPeGtrj/kg/xBUmZnQ7+ImmdAGa10dOnG4GJoVABD3JrSaYGwuXWt a6mL+hku5gjWMC+QtyZrOuEbAghet1Yxs00QO1ijmMmYvoqiDWI5YYlEd1HkqkUJmYrl WCW5vBl5Hcc0wOFJKja693jch1LOpK0mGJzoxzEDeOcIqDC761gAfhVsllV58oyhJc4O /NV4gYCM+aBPCXJT4UUac03j6x6lVqJS4oWN9CC5IdmehkVdmtFzBRWs9iRkPdWO3Jc9 pBzg== X-Gm-Message-State: ALQs6tA75bbYYmW312ZMc2mcwPKEsDjkxvpoaQtjqVrqG68YUamh+cnJ 4fIPpJCx/jygpOoNhYmXFz8LNOW4X2O4SQ== X-Google-Smtp-Source: AIpwx48UdYZ+GH2r9OSm8s+vdMrO/FX+hlB+uEBezPHxVjpBtgBwcciAviB4CR3T19ApF5JQhEXA7g== X-Received: by 2002:a17:902:728f:: with SMTP id d15-v6mr836477pll.119.1524031556365; Tue, 17 Apr 2018 23:05:56 -0700 (PDT) Received: from maindev.thefacebook.com ([199.201.64.2]) by smtp.gmail.com with ESMTPSA id a6sm799141pfo.157.2018.04.17.23.05.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Apr 2018 23:05:55 -0700 (PDT) From: "Nikita V. Shirokov" To: Alexei Starovoitov , Daniel Borkmann , Jason Wang , "David S. Miller" , "Michael S. Tsirkin" Cc: netdev@vger.kernel.org, "Nikita V. Shirokov" Subject: [PATCH bpf-next v2 07/11] bpf: make tun compatible w/ bpf_xdp_adjust_tail Date: Tue, 17 Apr 2018 21:29:47 -0700 Message-Id: <20180418042951.17183-8-tehnerd@tehnerd.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180418042951.17183-1-tehnerd@tehnerd.com> References: <20180418042951.17183-1-tehnerd@tehnerd.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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) Reviewed-by: Jason Wang --- 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 1e58be152d5c..901351a6ed21 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1696,6 +1696,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); @@ -1716,7 +1717,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;