Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3712115pxv; Mon, 26 Jul 2021 10:01:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzlh3r5fBtzDcg15DTWGWCNKlX9du+/aQl3dnOfdbx0pk0oauBb3tfaEal072DBLEL4gPtX X-Received: by 2002:a05:6e02:528:: with SMTP id h8mr9648161ils.223.1627318881358; Mon, 26 Jul 2021 10:01:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627318881; cv=none; d=google.com; s=arc-20160816; b=I5t22ohh1NcDYD9S7hsyjYR4H17nmfO79im01JpU7IfsgtBO2Czc1jpGCO2n2RPivD KPzo9AmJLadLSrg1XdSPiNRosBRrGLJr2n0wjgQNDo6SbKWBs/PSz3mA4Guo5dFJsELF 35nm5RIOqQkx120IFbhZtr6fF1j0aTjhDiIjzW0Y45ijJjQCDCoY56y6UJ6lD5s5/oXQ ymK4t2z6MlpmTcb+QyvEcoiiUPTa0nkz6J58y5LiJV4FXF2AuPZ5gGB9ooklhaZPHTWA tmKTkQAZnHLhbK25f/vMtXxEhkJW9xKj7n6cnH6K7Me5eRGQqqYn/TJf7t+xJRPu1O1U +cMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=r3s4928D+XJKMY1Ol4SXgHwztlO1z2MeO0TqMMb5RFU=; b=d5IeYS5/sP0VwhafHlZFU7UaEkpglIoLqsW3R1C4Ppm2xQjaTjaTJ0KTot+WR22ttg cxi220UI0VfzlJnBK8sWdFEshCY2y3k3www/epfsyTqyWhrjbkCYMv8gT4vVgpKekfBS QhbGXK6mRX7OGkiyfVmrSdNteCqZf3metgQ+qSuuPIZpmjJndZhDGKjim3neZ6gq/LRu hq+LcpW7iVQXe8SEvjPP+c0Td3tD8eLW8s/vp4nR/7D/pXlNF9s9JlarXO0txFar5isW 97nK6qyzpNsQE3el9Ft1Mk0kDkrq8pbMCRZOUtpGYwELhMDtdMC8vFMs/bP2lsqYAQi0 eRpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=A0CWWOyD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y26si396312iod.1.2021.07.26.10.01.08; Mon, 26 Jul 2021 10:01:21 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=A0CWWOyD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238242AbhGZPj1 (ORCPT + 99 others); Mon, 26 Jul 2021 11:39:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:37028 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237320AbhGZPWX (ORCPT ); Mon, 26 Jul 2021 11:22:23 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1408760F5B; Mon, 26 Jul 2021 15:52:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627314761; bh=kegkrodUAsveoD/eXhae1/bJOl4CgSpXd72OZsyVSiQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A0CWWOyDdXPVnC22VDEauKW440lQz9Ncj+AAEx01qWtxqPDp/raMmyVg82FodaeTz /eahMAIPj33uVNrK3ggBQQFyJtfZl/dRhmrITj7jkvD8HecJRGzkarNeMhBv1oBjzc PjMAlKGOZ3aG8ZVtXqLdysmwmHzfh4bAfQmMmf6U= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Cong Wang , Peilin Ye , "David S. Miller" , Sasha Levin Subject: [PATCH 4.19 083/120] net/sched: act_skbmod: Skip non-Ethernet packets Date: Mon, 26 Jul 2021 17:38:55 +0200 Message-Id: <20210726153835.048086833@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210726153832.339431936@linuxfoundation.org> References: <20210726153832.339431936@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Peilin Ye [ Upstream commit 727d6a8b7ef3d25080fad228b2c4a1d4da5999c6 ] Currently tcf_skbmod_act() assumes that packets use Ethernet as their L2 protocol, which is not always the case. As an example, for CAN devices: $ ip link add dev vcan0 type vcan $ ip link set up vcan0 $ tc qdisc add dev vcan0 root handle 1: htb $ tc filter add dev vcan0 parent 1: protocol ip prio 10 \ matchall action skbmod swap mac Doing the above silently corrupts all the packets. Do not perform skbmod actions for non-Ethernet packets. Fixes: 86da71b57383 ("net_sched: Introduce skbmod action") Reviewed-by: Cong Wang Signed-off-by: Peilin Ye Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/sched/act_skbmod.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/net/sched/act_skbmod.c b/net/sched/act_skbmod.c index 21d195296121..03a272af664a 100644 --- a/net/sched/act_skbmod.c +++ b/net/sched/act_skbmod.c @@ -10,6 +10,7 @@ */ #include +#include #include #include #include @@ -36,6 +37,13 @@ static int tcf_skbmod_act(struct sk_buff *skb, const struct tc_action *a, tcf_lastuse_update(&d->tcf_tm); bstats_cpu_update(this_cpu_ptr(d->common.cpu_bstats), skb); + action = READ_ONCE(d->tcf_action); + if (unlikely(action == TC_ACT_SHOT)) + goto drop; + + if (!skb->dev || skb->dev->type != ARPHRD_ETHER) + return action; + /* XXX: if you are going to edit more fields beyond ethernet header * (example when you add IP header replacement or vlan swap) * then MAX_EDIT_LEN needs to change appropriately @@ -44,10 +52,6 @@ static int tcf_skbmod_act(struct sk_buff *skb, const struct tc_action *a, if (unlikely(err)) /* best policy is to drop on the floor */ goto drop; - action = READ_ONCE(d->tcf_action); - if (unlikely(action == TC_ACT_SHOT)) - goto drop; - p = rcu_dereference_bh(d->skbmod_p); flags = p->flags; if (flags & SKBMOD_F_DMAC) -- 2.30.2