From patchwork Sun Dec 30 22:21:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Willem de Bruijn X-Patchwork-Id: 1019489 X-Patchwork-Delegate: davem@davemloft.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=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Gl2y4UPh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43SZkF559fz9s3l for ; Mon, 31 Dec 2018 09:24:37 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726798AbeL3WVK (ORCPT ); Sun, 30 Dec 2018 17:21:10 -0500 Received: from mail-qt1-f193.google.com ([209.85.160.193]:41693 "EHLO mail-qt1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726342AbeL3WVK (ORCPT ); Sun, 30 Dec 2018 17:21:10 -0500 Received: by mail-qt1-f193.google.com with SMTP id l12so28080293qtf.8 for ; Sun, 30 Dec 2018 14:21:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=1bFe9wYy7k+lcgyGgpe56TFmSZ4+nzmv4tY9SpJ1IGk=; b=Gl2y4UPhnaTAfBBWSsOd66G4wHl4l4YxToQzPoY4dcr5yMvQmOYhuaALB0HoFbmoDh D5Tl8TFqjQ9hDbR+oj+EwJBjw1Wuua4iNYMd3AQuTiXNMsOgI6G5ZNpN2/mQ441SMDLe KchYFeIpc7vocHQXTVJjZgN8fngMjBFohvosBD0l2duuflXf+bwqwHRMM5Vw3sHsEdIT hUeITrIgFkMMChhrllxgXwLYp2sFkkxvN7Dsjvz8N10VVbMLp2pKBIPxwznCe2rI4N6g h5X4zdF/9/lL1mjVRckF186GqMt/KtMVzZiP2ttnAmgyRD7T2Mc3MnFt6MvrlM9vX1mZ 1I3Q== 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:mime-version :content-transfer-encoding; bh=1bFe9wYy7k+lcgyGgpe56TFmSZ4+nzmv4tY9SpJ1IGk=; b=sGZ+v4JOGTns78Foo+EfZUUngdkmZwGJ9vLmYJrrLYsXX6sT7Y0XDbziP4ldeTsPuG YeYhSuvaUP8znhXTINC2/cC+MI0C/qrA8ffPG0BC7fls8dmskXnV+Bm5TGe2tYEs9vYN 93o1lssheSlJp9IJKUszLbJgtRnGjARaLTmoSU/wUhTM6Cvl8CCtiHV7A2+IWowGZko9 5kG58aEu7REOScyniRARf2TZkADyQ8EF8QR0gf3qEg+bvWIpwFyQYOs+qhRQXdxcyrMa 5J1rpdCK1wpV3kX/wQmwB+oDqgcqP3VUWFniLho+Jo6u93A3s4SjdI3EPYfktUuFACV7 yFuQ== X-Gm-Message-State: AJcUukfGEDc9BI9UPMS1VXh0kmxmQOlijGRRlfC870MArELbZDZZtGk7 1tu4rMrq28CKDys5clI7lUqdTnZieSE= X-Google-Smtp-Source: ALg8bN6WIqc5Z8x4PUaV3cFVI30oa/LdJ2vo/9rqQ1pbzZNW7iBrK7YDVAO/FSTJ8OjDwESQAVQtQQ== X-Received: by 2002:a0c:9659:: with SMTP id 25mr33558180qvy.3.1546208468861; Sun, 30 Dec 2018 14:21:08 -0800 (PST) Received: from willemb1.nyc.corp.google.com ([2620:0:1003:315:3fa1:a34c:1128:1d39]) by smtp.gmail.com with ESMTPSA id b134sm17656158qkg.78.2018.12.30.14.21.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 30 Dec 2018 14:21:07 -0800 (PST) From: Willem de Bruijn To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@idosch.org, borntraeger@de.ibm.com, Willem de Bruijn Subject: [PATCH net] tap: call skb_probe_transport_header after setting skb->dev Date: Sun, 30 Dec 2018 17:21:05 -0500 Message-Id: <20181230222105.36031-1-willemdebruijn.kernel@gmail.com> X-Mailer: git-send-email 2.20.1.415.g653613c723-goog MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Willem de Bruijn The BPF flow dissector expects either skb->sk or skb->dev set on all skbs. Delay flow dissection until after skb->dev is set. This requires calling from within an rcu read-side critical section. That is fine, see also the call from tun_xdp_one. Fixes: d0e13a1488ad ("flow_dissector: lookup netns by skb->sk if skb->dev is NULL") Reported-by: Christian Borntraeger Signed-off-by: Willem de Bruijn Tested-by: Christian Borntraeger --- drivers/net/tap.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/tap.c b/drivers/net/tap.c index 443b2694130c..c0b52e48f0e6 100644 --- a/drivers/net/tap.c +++ b/drivers/net/tap.c @@ -1177,8 +1177,6 @@ static int tap_get_user_xdp(struct tap_queue *q, struct xdp_buff *xdp) goto err_kfree; } - skb_probe_transport_header(skb, ETH_HLEN); - /* Move network header to the right position for VLAN tagged packets */ if ((skb->protocol == htons(ETH_P_8021Q) || skb->protocol == htons(ETH_P_8021AD)) && @@ -1189,6 +1187,7 @@ static int tap_get_user_xdp(struct tap_queue *q, struct xdp_buff *xdp) tap = rcu_dereference(q->tap); if (tap) { skb->dev = tap->dev; + skb_probe_transport_header(skb, ETH_HLEN); dev_queue_xmit(skb); } else { kfree_skb(skb);