From patchwork Wed Apr 18 04:42:14 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: 900120 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="eQvWVpVZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40R2qM16tVz9s3X for ; Wed, 18 Apr 2018 23:22:55 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754023AbeDRNWw (ORCPT ); Wed, 18 Apr 2018 09:22:52 -0400 Received: from mail-pl0-f66.google.com ([209.85.160.66]:33516 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753883AbeDRNWH (ORCPT ); Wed, 18 Apr 2018 09:22:07 -0400 Received: by mail-pl0-f66.google.com with SMTP id w12-v6so1124337plp.0 for ; Wed, 18 Apr 2018 06:22:07 -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=/H2BK4DW42sFoTvSuyFM1VzmNSYB3OdbTTfoBnASpMU=; b=eQvWVpVZlXW0Pt5TU9RLCmMYeAfXHeIyFR6upQ2iRrsJvOmIbnKFKV0tDElohxJl74 WARsSzqxJNPJX1J4EOLJ340i1DRBV/Y6f3PlQVm4ZWD4ENjZeT6sUZOGL3AXpIfc/8mv vAuMAntO75kpPYmqV5sXBScpCdDFk7YMArG107FykLkAPgEFme+JNRGMT/BSOR8LMD92 wyMMLFlwOrALQQ5YSTEy+H434pBts4g2sD/fmi4fqtjgvJp7bi5JPlcOPgFTns6hE+ap H4juu3ltlMT/mMURcTz9+V9CnhC0MWsnyqgW6X4rDaNc3NJwvdR4QW/SfZBMf0U2EnNb RgSg== 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=/H2BK4DW42sFoTvSuyFM1VzmNSYB3OdbTTfoBnASpMU=; b=m3CJyX7RQtmuuhF2LHubaL1NRxUQYGmgqJDLR7IUSHQaTpHdNFz2CG6xVSuxdnP+jt wtcbnVDWowBDPplZPj5KZ7PLwwkEZ4I9ZnH1KmY/a5djwbvm4c5MEGyFSok04WuHdhzE rgBMUdZDuf+TNmird4b1auzuozwyIJB0smHJ89ptuKrilNv8etBI2CSMUTynVRB7d/z6 6xcB5jpa7iJbjEhK3l88bs8HA5smrfEpL9J/+s0v87JczPWXpCAcEbhrfbv5UjP97hRC exwN6NyKe2sGw3xBIaIz10WOOg6RkCCQXmBltP9vT5xk7kzta5HitwY8BTYpRLCl0f3t 3QrQ== X-Gm-Message-State: ALQs6tDOT5gyxuJ4qZPJdydR92yYn3P0qp5vTFkJ5ZJcTSZLmogiIBCL VMdnCNc/ZyxivfOVNRNgYclbaA== X-Google-Smtp-Source: AIpwx48Ak0flALVr3tqbGVvblw+4DxeHSOi345RtOCl+u9LuZske4WqBszebdz4kbNke6bVe2LoJWA== X-Received: by 2002:a17:902:f44:: with SMTP id 62-v6mr2119789ply.318.1524057726901; Wed, 18 Apr 2018 06:22:06 -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.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Apr 2018 06:22:06 -0700 (PDT) From: "Nikita V. Shirokov" To: Alexei Starovoitov , Daniel Borkmann , "David S. Miller " Cc: netdev@vger.kernel.org, "Nikita V. Shirokov" Subject: [PATCH bpf-next v3 02/11] bpf: make generic xdp compatible w/ bpf_xdp_adjust_tail Date: Tue, 17 Apr 2018 21:42:14 -0700 Message-Id: <20180418044223.17685-3-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 generic XDP we need to reflect this packet's length change by adjusting skb's tail pointer Acked-by: Alexei Starovoitov Signed-off-by: Nikita V. Shirokov --- net/core/dev.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/net/core/dev.c b/net/core/dev.c index 969462ebb296..11c789231a03 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3996,9 +3996,9 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb, struct bpf_prog *xdp_prog) { struct netdev_rx_queue *rxqueue; + void *orig_data, *orig_data_end; u32 metalen, act = XDP_DROP; struct xdp_buff xdp; - void *orig_data; int hlen, off; u32 mac_len; @@ -4037,6 +4037,7 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb, xdp.data_meta = xdp.data; xdp.data_end = xdp.data + hlen; xdp.data_hard_start = skb->data - skb_headroom(skb); + orig_data_end = xdp.data_end; orig_data = xdp.data; rxqueue = netif_get_rxqueue(skb); @@ -4051,6 +4052,13 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb, __skb_push(skb, -off); skb->mac_header += off; + /* check if bpf_xdp_adjust_tail was used. it can only "shrink" + * pckt. + */ + off = orig_data_end - xdp.data_end; + if (off != 0) + skb_set_tail_pointer(skb, xdp.data_end - xdp.data); + switch (act) { case XDP_REDIRECT: case XDP_TX: