From patchwork Wed Apr 18 04:29:48 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: 899913 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="w7DowjZQ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40Qs7R0LDcz9s1v for ; Wed, 18 Apr 2018 16:06:11 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752810AbeDRGGC (ORCPT ); Wed, 18 Apr 2018 02:06:02 -0400 Received: from mail-pl0-f46.google.com ([209.85.160.46]:40321 "EHLO mail-pl0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752788AbeDRGF5 (ORCPT ); Wed, 18 Apr 2018 02:05:57 -0400 Received: by mail-pl0-f46.google.com with SMTP id t22-v6so459724plo.7 for ; Tue, 17 Apr 2018 23:05:57 -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=2gyG9PfsqVEwVBX6fDm6Pf5D/HyJOdVohNVwrjRtjfg=; b=w7DowjZQ/7vm1QeWrn0rx5nTHPsSO8MgKxUtoUNtSCyf3jU+DpcQk2FCwHKolq5nwG tpLkTGZth3V2F1S9WASJhrBwFCFnWOixnBt0Fr1H4R8sH/byhHPOMZEGnYwMGM1wKw29 eq4WgL2SJ1wd1ndYo7K8y7hgEjKSxwUvCDgeZa9f4sKs3Tubs780RGjy/YjfvVgK7HHY AcMZWGD+SrGEg6CU7PHxHIqMTiQEBjO4+86LciX7Gnihx4WlD7sYQMOgniafzLT+FLpn iJYlz1VfVsjTk/ZyBkDaDatLSSUQ/CWE8HRBNnQMgGsqiTVVD95FlbpcAjwedK5yHRWi hgVw== 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=2gyG9PfsqVEwVBX6fDm6Pf5D/HyJOdVohNVwrjRtjfg=; b=mmyZcgCyXzRt8YMs6+jYRJulIsUyNrIN6yx9Unk4fA8zyFa2mMk/ksWoxkIWRtZpwr v5XvRJGKmrEswqYMkCXigsKxAH6FqwOhQ2yzwpbZWauQzdApT/UqIsS+jG84WXobUpht 8d8hFR98LS7SfRruE/1AIr7WaGTZIcwXQ5KOXCMKS6r9qYgvg3t+z0fRqMfqUFRVhKOz HfYxL3Qc8Vxz/pWo8lIB+VYbqj8W9VE6atDKfsvthTLkWH5G/wQzSGeNimsJfcEJIQto vELeoEiTWsq7wL1JoVTVZOtfIV+h6audUXJqOErkd2Q39epwRboN233nibMuLV17Xp2w r17A== X-Gm-Message-State: ALQs6tAkdr/XQy0tNjnPLlV3vJGRGTF3VHsDr342yl4aQSaqHxk0IBzP b9ZYqxMXXWgxzNaiXI2WzMiiKA== X-Google-Smtp-Source: AIpwx4+TA9LoBLEgh6OVkweYxsZ4jQEYCV8WDHsHCKdnqV2cHIoSiAiGR/QNwxqbafchz4ZqnNnHqA== X-Received: by 2002:a17:902:5902:: with SMTP id o2-v6mr830219pli.81.1524031557432; Tue, 17 Apr 2018 23:05:57 -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.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Apr 2018 23:05:56 -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 v2 08/11] bpf: make virtio compatible w/ bpf_xdp_adjust_tail Date: Tue, 17 Apr 2018 21:29:48 -0700 Message-Id: <20180418042951.17183-9-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 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 --- 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();