All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, "Vincent Bernat" <vincent@bernat.ch>,
	"Michal Soltys" <soltys@ziu.info>,
	"Maciej Żenczykowski" <maze@google.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 4.14 25/34] bonding: fix PACKET_ORIGDEV regression
Date: Mon, 18 Mar 2019 10:25:49 +0100	[thread overview]
Message-ID: <20190318084148.238318296@linuxfoundation.org> (raw)
In-Reply-To: <20190318084144.657740413@linuxfoundation.org>

4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Michal Soltys <soltys@ziu.info>

[ Upstream commit 3c963a3306eada999be5ebf4f293dfa3d3945487 ]

This patch fixes a subtle PACKET_ORIGDEV regression which was a side
effect of fixes introduced by:

6a9e461f6fe4 bonding: pass link-local packets to bonding master also.

... to:

b89f04c61efe bonding: deliver link-local packets with skb->dev set to link that packets arrived on

While 6a9e461f6fe4 restored pre-b89f04c61efe presence of link-local
packets on bonding masters (which is required e.g. by linux bridges
participating in spanning tree or needed for lab-like setups created
with group_fwd_mask) it also caused the originating device
information to be lost due to cloning.

Maciej Żenczykowski proposed another solution that doesn't require
packet cloning and retains original device information - instead of
returning RX_HANDLER_PASS for all link-local packets it's now limited
only to packets from inactive slaves.

At the same time, packets passed to bonding masters retain correct
information about the originating device and PACKET_ORIGDEV can be used
to determine it.

This elegantly solves all issues so far:

- link-local packets that were removed from bonding masters
- LLDP daemons being forced to explicitly bind to slave interfaces
- PACKET_ORIGDEV having no effect on bond interfaces

Fixes: 6a9e461f6fe4 (bonding: pass link-local packets to bonding master also.)
Reported-by: Vincent Bernat <vincent@bernat.ch>
Signed-off-by: Michal Soltys <soltys@ziu.info>
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/bonding/bond_main.c |   35 ++++++++++++++---------------------
 1 file changed, 14 insertions(+), 21 deletions(-)

--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1177,29 +1177,22 @@ static rx_handler_result_t bond_handle_f
 		}
 	}
 
-	/* Link-local multicast packets should be passed to the
-	 * stack on the link they arrive as well as pass them to the
-	 * bond-master device. These packets are mostly usable when
-	 * stack receives it with the link on which they arrive
-	 * (e.g. LLDP) they also must be available on master. Some of
-	 * the use cases include (but are not limited to): LLDP agents
-	 * that must be able to operate both on enslaved interfaces as
-	 * well as on bonds themselves; linux bridges that must be able
-	 * to process/pass BPDUs from attached bonds when any kind of
-	 * STP version is enabled on the network.
+	/*
+	 * For packets determined by bond_should_deliver_exact_match() call to
+	 * be suppressed we want to make an exception for link-local packets.
+	 * This is necessary for e.g. LLDP daemons to be able to monitor
+	 * inactive slave links without being forced to bind to them
+	 * explicitly.
+	 *
+	 * At the same time, packets that are passed to the bonding master
+	 * (including link-local ones) can have their originating interface
+	 * determined via PACKET_ORIGDEV socket option.
 	 */
-	if (is_link_local_ether_addr(eth_hdr(skb)->h_dest)) {
-		struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC);
-
-		if (nskb) {
-			nskb->dev = bond->dev;
-			nskb->queue_mapping = 0;
-			netif_rx(nskb);
-		}
-		return RX_HANDLER_PASS;
-	}
-	if (bond_should_deliver_exact_match(skb, slave, bond))
+	if (bond_should_deliver_exact_match(skb, slave, bond)) {
+		if (is_link_local_ether_addr(eth_hdr(skb)->h_dest))
+			return RX_HANDLER_PASS;
 		return RX_HANDLER_EXACT;
+	}
 
 	skb->dev = bond->dev;
 



  parent reply	other threads:[~2019-03-18  9:35 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-18  9:25 [PATCH 4.14 00/34] 4.14.107-stable review Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 01/34] ACPICA: Reference Counts: increase max to 0x4000 for large servers Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 02/34] perf tools: Fix compile error with libunwind x86 Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 03/34] gro_cells: make sure device is up in gro_cells_receive() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 04/34] ipv4/route: fail early when inet dev is missing Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 05/34] l2tp: fix infoleak in l2tp_ip6_recvmsg() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 06/34] net: hsr: fix memory leak in hsr_dev_finalize() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 07/34] net/hsr: fix possible crash in add_timer() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 08/34] net: sit: fix UBSAN Undefined behaviour in check_6rd Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 09/34] net/x25: fix use-after-free in x25_device_event() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 10/34] net/x25: reset state in x25_connect() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 11/34] pptp: dst_release sk_dst_cache in pptp_sock_destruct Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 12/34] ravb: Decrease TxFIFO depth of Q3 and Q2 to one Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 13/34] route: set the deleted fnhe fnhe_daddr to 0 in ip_del_fnhe to fix a race Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 14/34] rxrpc: Fix client call queueing, waiting for channel Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 15/34] tcp: Dont access TCP_SKB_CB before initializing it Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 16/34] tcp: handle inet_csk_reqsk_queue_add() failures Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 17/34] vxlan: Fix GRO cells race condition between receive and link delete Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 18/34] vxlan: test dev->flags & IFF_UP before calling gro_cells_receive() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 19/34] net/mlx4_core: Fix reset flow when in command polling mode Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 20/34] net/mlx4_core: Fix locking in SRIOV mode when switching between events and polling Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 21/34] net/mlx4_core: Fix qp mtt size calculation Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 22/34] net/x25: fix a race in x25_bind() Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 23/34] mdio_bus: Fix use-after-free on device_register fails Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 24/34] net: Set rtm_table to RT_TABLE_COMPAT for ipv6 for tables > 255 Greg Kroah-Hartman
2019-03-18  9:25 ` Greg Kroah-Hartman [this message]
2019-03-18  9:25 ` [PATCH 4.14 26/34] missing barriers in some of unix_sock ->addr and ->path accesses Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 27/34] ipvlan: disallow userns cap_net_admin to change global mode/flags Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 28/34] perf/x86: Fixup typo in stub functions Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 29/34] ALSA: bebob: use more identical mod_alias for Saffire Pro 10 I/O against Liquid Saffire 56 Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 30/34] ALSA: firewire-motu: fix construction of PCM frame for capture direction Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 31/34] perf/x86/intel: Fix memory corruption Greg Kroah-Hartman
2019-03-18 18:20   ` DSouza, Nelson
2019-03-18 20:29   ` DSouza, Nelson
2019-03-19 12:20     ` Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 32/34] perf/x86/intel: Make dev_attr_allow_tsx_force_abort static Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 33/34] Its wrong to add len to sector_nr in raid10 reshape twice Greg Kroah-Hartman
2019-03-18  9:25 ` [PATCH 4.14 34/34] vhost/vsock: fix vhost vsock cid hashing inconsistent Greg Kroah-Hartman
2019-03-18 13:22 ` [PATCH 4.14 00/34] 4.14.107-stable review kernelci.org bot
2019-03-18 16:27 ` Naresh Kamboju
2019-03-19  2:25 ` Guenter Roeck
2019-03-19 10:33 ` Jon Hunter
2019-03-19 10:33   ` Jon Hunter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190318084148.238318296@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maze@google.com \
    --cc=soltys@ziu.info \
    --cc=stable@vger.kernel.org \
    --cc=vincent@bernat.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.