From patchwork Wed Apr 18 04:42:20 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: 900114 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="O7SZvUBm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40R2ph30Swz9s4s for ; Wed, 18 Apr 2018 23:22:20 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753990AbeDRNWS (ORCPT ); Wed, 18 Apr 2018 09:22:18 -0400 Received: from mail-pl0-f68.google.com ([209.85.160.68]:38437 "EHLO mail-pl0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753170AbeDRNWO (ORCPT ); Wed, 18 Apr 2018 09:22:14 -0400 Received: by mail-pl0-f68.google.com with SMTP id c7-v6so1118725plr.5 for ; Wed, 18 Apr 2018 06:22:14 -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=ZuuVerOlUma3in/uqLFo7CeRJ+N5zRkmbaycMJUzg/E=; b=O7SZvUBmdtbtx4wg9Vj652mlly3Bud3/TsEBS3N78Xw4ThQEzjwMLSFtAOk64wNYRh BTvmxqirtGWE+ehpQtQoqOjANwgZb5X5pSCkDAxMN5ADrfHO6BpY5ITVvyQqsAXWJ2Op 6YMBUoTGoVImvsBGW61cUxmq7GKUZRR7m3SugiQavrhLFcIsLQkAfbzPRdSr0cz6wdoY 6tdb+ogkp2mzp4p+anc3agwDicep6uZ0wQ7w4uealXGfNebCOW3/n+14lqQpq7/1Pksy 2WsU3qP/THE1IPek/mS8WjPM2XixQbbbV+5D3dxFOJtHjKAqrYzc7SnD0DELgXpW3Bpl pgWg== 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=ZuuVerOlUma3in/uqLFo7CeRJ+N5zRkmbaycMJUzg/E=; b=oAvOrrvw9EDhKypvM++jQH/WEwe76wED3mQAOBbX2dZV1vsQ+S2YGRYqX8tl7W0zac +s2dIZjEW1+74kNWPAaajEbGdmjJHYpqhFIAFyI2luq3NdxgKcqG3iLZm8dIWjUCmxcd pDqHp4K7YNWGiLz8Q0UQfgk6ldcSdHlmtb1abaT6zwIJjtzZSinXgWNi9GKwuvfHY1sM mS1zMuWVir3mA7KktRHvgd3HZQ6AWOlhSQPrcBEaL++MxPb/nl/VrxyxURn8bQQUG3b/ QFClMDTz+sw9LYJ/B8dkJSo4HZquY3AUowh4pvsE+QyC0pIRU2jIHh2flothjdW8fsC4 hAZQ== X-Gm-Message-State: ALQs6tBB55Yxy/cEWVP25X/10CazwdG0mjnDOT54Cmf3WW/DbugYUlF7 aTBYyrwNleMco7hm/rnY28MCr1JuKH1baQ== X-Google-Smtp-Source: AIpwx48MIldf7PaCO3ztLBlV/jG0BbMlPXnZ5FwkeQ5dxf4m+KZgKzK3kCtnOVuGynL79qaNlAYPrQ== X-Received: by 2002:a17:902:988d:: with SMTP id s13-v6mr2044094plp.30.1524057733823; Wed, 18 Apr 2018 06:22:13 -0700 (PDT) Received: from maindev.thefacebook.com ([199.201.64.2]) by smtp.gmail.com with ESMTPSA id u7sm3836378pfa.96.2018.04.18.06.22.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Apr 2018 06:22:13 -0700 (PDT) From: "Nikita V. Shirokov" To: Alexei Starovoitov , Daniel Borkmann , "Michael S. Tsirkin mst @ redhat . com , Jason Wang " Cc: netdev@vger.kernel.org, "Nikita V. Shirokov" Subject: [PATCH bpf-next v3 08/11] bpf: make virtio compatible w/ bpf_xdp_adjust_tail Date: Tue, 17 Apr 2018 21:42:20 -0700 Message-Id: <20180418044223.17685-9-tehnerd@tehnerd.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180418044223.17685-1-tehnerd@tehnerd.com> References: <20180418044223.17685-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 virtio driver we need to adjust XDP_PASS handling by recalculating length of the packet if it was passed to the TCP/IP stack Reviewed-by: Jason Wang Signed-off-by: Nikita V. Shirokov --- drivers/net/virtio_net.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 01694e26f03e..779a4f798522 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -606,6 +606,7 @@ static struct sk_buff *receive_small(struct net_device *dev, case XDP_PASS: /* Recalculate length in case bpf program changed it */ delta = orig_data - xdp.data; + len = xdp.data_end - xdp.data; break; case XDP_TX: xdpf = convert_to_xdp_frame(&xdp); @@ -642,7 +643,7 @@ static struct sk_buff *receive_small(struct net_device *dev, goto err; } skb_reserve(skb, headroom - delta); - skb_put(skb, len + delta); + skb_put(skb, len); if (!delta) { buf += header_offset; memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len); @@ -757,6 +758,10 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, offset = xdp.data - page_address(xdp_page) - vi->hdr_len; + /* recalculate len if xdp.data or xdp.data_end were + * adjusted + */ + len = xdp.data_end - xdp.data; /* We can only create skb based on xdp_page. */ if (unlikely(xdp_page != page)) { rcu_read_unlock();