From: <gregkh@linuxfoundation.org>
To: b.a.t.m.a.n@lists.open-mesh.org, gregkh@linuxfoundation.org,
linus.luessing@c0d3.blue, sven@narfation.org,
sw@simonwunderlich.de
Cc: stable-commits@vger.kernel.org
Subject: Patch "batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN" has been added to the 4.4-stable tree
Date: Tue, 23 Nov 2021 13:42:44 +0100 [thread overview]
Message-ID: <1637671364200198@kroah.com> (raw)
In-Reply-To: <20211120123939.260723-5-sven@narfation.org>
This is a note to let you know that I've just added the patch titled
batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
batman-adv-mcast-fix-duplicate-mcast-packets-in-bla-backbone-from-lan.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
From foo@baz Tue Nov 23 01:39:02 PM CET 2021
From: Sven Eckelmann <sven@narfation.org>
Date: Sat, 20 Nov 2021 13:39:32 +0100
Subject: batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN
To: stable@vger.kernel.org
Cc: b.a.t.m.a.n@lists.open-mesh.org, "Linus Lüssing" <linus.luessing@c0d3.blue>, "Simon Wunderlich" <sw@simonwunderlich.de>, "Sven Eckelmann" <sven@narfation.org>
Message-ID: <20211120123939.260723-5-sven@narfation.org>
From: Linus Lüssing <linus.luessing@c0d3.blue>
commit 3236d215ad38a3f5372e65cd1e0a52cf93d3c6a2 upstream.
Scenario:
* Multicast frame send from a BLA backbone (multiple nodes with
their bat0 bridged together, with BLA enabled)
Issue:
* BLA backbone nodes receive the frame multiple times on bat0
For multicast frames received via batman-adv broadcast packets the
originator of the broadcast packet is checked before decapsulating and
forwarding the frame to bat0 (batadv_bla_is_backbone_gw()->
batadv_recv_bcast_packet()). If it came from a node which shares the
same BLA backbone with us then it is not forwarded to bat0 to avoid a
loop.
When sending a multicast frame in a non-4-address batman-adv unicast
packet we are currently missing this check - and cannot do so because
the batman-adv unicast packet has no originator address field.
However, we can simply fix this on the sender side by only sending the
multicast frame via unicasts to interested nodes which do not share the
same BLA backbone with us. This also nicely avoids some unnecessary
transmissions on mesh side.
Note that no infinite loop was observed, probably because of dropping
via batadv_interface_tx()->batadv_bla_tx(). However the duplicates still
utterly confuse switches/bridges, ICMPv6 duplicate address detection and
neighbor discovery and therefore leads to long delays before being able
to establish TCP connections, for instance. And it also leads to the Linux
bridge printing messages like:
"br-lan: received packet on eth1 with own address as source address ..."
Fixes: 1d8ab8d3c176 ("batman-adv: Modified forwarding behaviour for multicast packets")
Signed-off-by: Linus Lüssing <linus.luessing@c0d3.blue>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
[ bp: 4.4 backport: drop usage in non-existing batadv_mcast_forw_*,
correct fixes line ]
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
net/batman-adv/multicast.c | 31 +++++++++++++++++++++++++++++++
net/batman-adv/multicast.h | 15 +++++++++++++++
net/batman-adv/soft-interface.c | 5 ++---
3 files changed, 48 insertions(+), 3 deletions(-)
--- a/net/batman-adv/multicast.c
+++ b/net/batman-adv/multicast.c
@@ -44,7 +44,9 @@
#include <net/addrconf.h>
#include <net/ipv6.h>
+#include "bridge_loop_avoidance.h"
#include "packet.h"
+#include "send.h"
#include "translation-table.h"
/**
@@ -806,6 +808,35 @@ void batadv_mcast_free(struct batadv_pri
}
/**
+ * batadv_mcast_forw_send_orig() - send a multicast packet to an originator
+ * @bat_priv: the bat priv with all the soft interface information
+ * @skb: the multicast packet to send
+ * @vid: the vlan identifier
+ * @orig_node: the originator to send the packet to
+ *
+ * Return: NET_XMIT_DROP in case of error or NET_XMIT_SUCCESS otherwise.
+ */
+int batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned short vid,
+ struct batadv_orig_node *orig_node)
+{
+ /* Avoid sending multicast-in-unicast packets to other BLA
+ * gateways - they already got the frame from the LAN side
+ * we share with them.
+ * TODO: Refactor to take BLA into account earlier, to avoid
+ * reducing the mcast_fanout count.
+ */
+ if (batadv_bla_is_backbone_gw_orig(bat_priv, orig_node->orig, vid)) {
+ dev_kfree_skb(skb);
+ return NET_XMIT_SUCCESS;
+ }
+
+ return batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST, 0,
+ orig_node, vid);
+}
+
+/**
* batadv_mcast_purge_orig - reset originator global mcast state modifications
* @orig: the originator which is going to get purged
*/
--- a/net/batman-adv/multicast.h
+++ b/net/batman-adv/multicast.h
@@ -44,6 +44,11 @@ enum batadv_forw_mode
batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb,
struct batadv_orig_node **mcast_single_orig);
+int batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned short vid,
+ struct batadv_orig_node *orig_node);
+
void batadv_mcast_init(struct batadv_priv *bat_priv);
void batadv_mcast_free(struct batadv_priv *bat_priv);
@@ -68,6 +73,16 @@ static inline int batadv_mcast_init(stru
return 0;
}
+static inline int
+batadv_mcast_forw_send_orig(struct batadv_priv *bat_priv,
+ struct sk_buff *skb,
+ unsigned short vid,
+ struct batadv_orig_node *orig_node)
+{
+ kfree_skb(skb);
+ return NET_XMIT_DROP;
+}
+
static inline void batadv_mcast_free(struct batadv_priv *bat_priv)
{
}
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -353,9 +353,8 @@ send:
goto dropped;
ret = batadv_send_skb_via_gw(bat_priv, skb, vid);
} else if (mcast_single_orig) {
- ret = batadv_send_skb_unicast(bat_priv, skb,
- BATADV_UNICAST, 0,
- mcast_single_orig, vid);
+ ret = batadv_mcast_forw_send_orig(bat_priv, skb, vid,
+ mcast_single_orig);
} else {
if (batadv_dat_snoop_outgoing_arp_request(bat_priv,
skb))
Patches currently in stable-queue which might be from sven@narfation.org are
queue-4.4/batman-adv-consider-fragmentation-for-needed_headroom.patch
queue-4.4/ath9k-fix-potential-interrupt-storm-on-queue-reset.patch
queue-4.4/batman-adv-set-.owner-to-this_module.patch
queue-4.4/batman-adv-mcast-fix-duplicate-mcast-packets-from-bla-backbone-to-mesh.patch
queue-4.4/batman-adv-fix-multicast-tt-issues-with-bogus-roam-flags.patch
queue-4.4/batman-adv-mcast-fix-duplicate-mcast-packets-in-bla-backbone-from-lan.patch
queue-4.4/batman-adv-reserve-needed_-room-for-fragments.patch
queue-4.4/net-batman-adv-fix-error-handling.patch
queue-4.4/batman-adv-keep-fragments-equally-sized.patch
queue-4.4/batman-adv-avoid-warn_on-timing-related-checks.patch
queue-4.4/batman-adv-prevent-duplicated-softif_vlan-entry.patch
queue-4.4/batman-adv-don-t-always-reallocate-the-fragmentation-skb-head.patch
queue-4.4/batman-adv-mcast-fix-duplicate-mcast-packets-in-bla-backbone-from-mesh.patch
next prev parent reply other threads:[~2021-11-23 12:42 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-20 12:39 [PATCH 4.4 00/11] batman-adv: Fixes for stable/linux-4.4.y Sven Eckelmann
2021-11-20 12:39 ` [PATCH 4.4 01/11] batman-adv: Keep fragments equally sized Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: Keep fragments equally sized" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 02/11] batman-adv: Fix multicast TT issues with bogus ROAM flags Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: Fix multicast TT issues with bogus ROAM flags" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 03/11] batman-adv: Prevent duplicated softif_vlan entry Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: Prevent duplicated softif_vlan entry" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 04/11] batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN Sven Eckelmann
2021-11-23 12:42 ` gregkh [this message]
2021-11-20 12:39 ` [PATCH 4.4 05/11] batman-adv: mcast: fix duplicate mcast packets in BLA backbone from mesh Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: mcast: fix duplicate mcast packets in BLA backbone from mesh" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 06/11] batman-adv: mcast: fix duplicate mcast packets from BLA backbone to mesh Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: mcast: fix duplicate mcast packets from BLA backbone to mesh" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 07/11] batman-adv: set .owner to THIS_MODULE Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: set .owner to THIS_MODULE" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 08/11] batman-adv: Consider fragmentation for needed_headroom Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: Consider fragmentation for needed_headroom" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 09/11] batman-adv: Reserve needed_*room for fragments Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: Reserve needed_*room for fragments" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 10/11] batman-adv: Don't always reallocate the fragmentation skb head Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: Don't always reallocate the fragmentation skb head" has been added to the 4.4-stable tree gregkh
2021-11-20 12:39 ` [PATCH 4.4 11/11] batman-adv: Avoid WARN_ON timing related checks Sven Eckelmann
2021-11-23 12:42 ` Patch "batman-adv: Avoid WARN_ON timing related checks" has been added to the 4.4-stable tree gregkh
2021-11-23 12:41 ` [PATCH 4.4 00/11] batman-adv: Fixes for stable/linux-4.4.y Greg KH
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=1637671364200198@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=b.a.t.m.a.n@lists.open-mesh.org \
--cc=linus.luessing@c0d3.blue \
--cc=stable-commits@vger.kernel.org \
--cc=sven@narfation.org \
--cc=sw@simonwunderlich.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).