Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp2462509imd; Fri, 2 Nov 2018 11:50:09 -0700 (PDT) X-Google-Smtp-Source: AJdET5cqU/SXHOfJ8bYEl4SOdV4xwFORJxVM3SsMG2+z0TEHSznl3PHMqsolPjYX8my4iPt9Xpij X-Received: by 2002:a65:6542:: with SMTP id a2mr11848580pgw.389.1541184609792; Fri, 02 Nov 2018 11:50:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541184609; cv=none; d=google.com; s=arc-20160816; b=Gf2X8pxTz/7IsXx8vEE1FnlJlyIQRxbl9PQyaQmc/f4fukgEc+8elIAMQIMGAzo1MR m33iOysBpanUj3s9MrasmmLDeiSgJRi9YAOmR7eXyG+UlddzkzDxe6BlhA/Q1BdnSQal aA5r9nwnRGAznSkmXjVfgJxzgymhJzkdPLH1cDiJ0ZGM2Za87O6GW19156OxGuX73sJM z07FARMjBVPkJvf8b5eYM0YqSrLxViPeLn6TjrePFsn9vtFBRteZgKpLfDaixqdymzmN rkkgCCUToFi/El/MFiEn9v9lCGlFqrqMxo5sBsMfbS7GKIrvzYKcUqcSbR5UocWZJCL3 Yzhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=lOy4moR2sft2pB4rbbxwzegqXU7fWM5An0/OVCfxb0Y=; b=0dCjH9k6gbYy9UvAaBQU1cXyZVDcgL6dqB7ZZ6+RAYStg4niBTVrj+Yht+mHJcbovp l934zewRzrFeAZkrnEP/naLuV8oqSE1NbcAbpPrc6Da/wRDiA9z2pbw0l4sMDg4Jiwh4 93/BD3vaDUIOlh/DoB/1iAusHandySkni3K0xVy80Kx2nATKea+1xn/zUCqT+F6+OK4v QBWQmaVHuiIDetPeJu22Slq9cwu0COsOl8oTtFoil+GUOeH3TYg8/QyL84cHcFowYWu0 4XahwwPU52tqKT2q2ZEGs4P+8vbPcmgrYQ+MzesOGGx0+3z+h2oqQM0M3plz0rmtWmrh VeRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="RhlOEs/8"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a8-v6si34164073plz.94.2018.11.02.11.49.54; Fri, 02 Nov 2018 11:50:09 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="RhlOEs/8"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730695AbeKCD5o (ORCPT + 99 others); Fri, 2 Nov 2018 23:57:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:53430 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728280AbeKCD5n (ORCPT ); Fri, 2 Nov 2018 23:57:43 -0400 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D44C520843; Fri, 2 Nov 2018 18:49:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541184569; bh=wCLDDUOsp+seXdqO+Yd34FEBQBv7nhoj6tuEJgNwEg8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RhlOEs/8qxixTaFax4ojtTDn758fHy1URGGsuPXkFkHoHxfIl7n59t9INjxffJY0R X7eFxmNu27SUUZXi1u/LleQ6y7vb5sLwoESb1a16QBC0psSR6jUWBFkDcey3YRTQ7s 3uw7+Ng72X4Tn9t7tZQRj9rgX1cdFp7PdSlmQhvo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "DSouza, Nelson" , David Ahern , Pablo Neira Ayuso , Sasha Levin Subject: [PATCH 4.14 014/143] netfilter: bridge: Dont sabotage nf_hook calls from an l3mdev Date: Fri, 2 Nov 2018 19:33:19 +0100 Message-Id: <20181102182858.222936726@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181102182857.064326086@linuxfoundation.org> References: <20181102182857.064326086@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit a173f066c7cfc031acb8f541708041e009fc9812 ] For starters, the bridge netfilter code registers operations that are invoked any time nh_hook is called. Specifically, ip_sabotage_in watches for nested calls for NF_INET_PRE_ROUTING when a bridge is in the stack. Packet wise, the bridge netfilter hook runs first. br_nf_pre_routing allocates nf_bridge, sets in_prerouting to 1 and calls NF_HOOK for NF_INET_PRE_ROUTING. It's finish function, br_nf_pre_routing_finish, then resets in_prerouting flag to 0 and the packet continues up the stack. The packet eventually makes it to the VRF driver and it invokes nf_hook for NF_INET_PRE_ROUTING in case any rules have been added against the vrf device. Because of the registered operations the call to nf_hook causes ip_sabotage_in to be invoked. That function sees the nf_bridge on the skb and that in_prerouting is not set. Thinking it is an invalid nested call it steals (drops) the packet. Update ip_sabotage_in to recognize that the bridge or one of its upper devices (e.g., vlan) can be enslaved to a VRF (L3 master device) and allow the packet to go through the nf_hook a second time. Fixes: 73e20b761acf ("net: vrf: Add support for PREROUTING rules on vrf device") Reported-by: D'Souza, Nelson Signed-off-by: David Ahern Signed-off-by: Pablo Neira Ayuso Signed-off-by: Sasha Levin --- net/bridge/br_netfilter_hooks.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c index c2eea1b8737a..7582f28ab306 100644 --- a/net/bridge/br_netfilter_hooks.c +++ b/net/bridge/br_netfilter_hooks.c @@ -832,7 +832,8 @@ static unsigned int ip_sabotage_in(void *priv, struct sk_buff *skb, const struct nf_hook_state *state) { - if (skb->nf_bridge && !skb->nf_bridge->in_prerouting) { + if (skb->nf_bridge && !skb->nf_bridge->in_prerouting && + !netif_is_l3_master(skb->dev)) { state->okfn(state->net, state->sk, skb); return NF_STOLEN; } -- 2.17.1