gluon/patches/packages/routing/0002-batman-adv-Merge-bugfixes-from-2017.4.patch
Sven Eckelmann f5b3c0c3bc batman-adv: Add maint patches between v2017.2 and 2018.1-maint 2018-06-03
Gluon 2017.1.x decided to use a batman-adv version (v2017.2 + maint patches
from 2017.3) which was not part of the openwrt-routing branch lede-17.01.
All the fixes which were added in the meantime to this branch must
therefore be ported manually to the gluon fork.

v2017.4
=======

* Fix lock for ogm cnt access in batadv_iv_ogm_calc_tq
* Fix check of retrieved orig_gw in batadv_v_gw_is_eligible
* Always initialize fragment header priority
* Avoid spurious warnings from bat_v neigh_cmp implementation

v2018.0
=======

* fix packet checksum in receive path
* invalidate checksum on fragment reassembly
* Ignore invalid batadv_iv_gw during netlink send
* Ignore invalid batadv_v_gw during netlink send
* Fix netlink dumping of BLA claims
* Fix netlink dumping of BLA backbones
* Fix internal interface indices types

v2018.1
=======

* Fix skbuff rcsum on packet reroute
* update data pointers after skb_cow()
* fix header size check in batadv_dbg_arp()
* Fix multicast packet loss with a single WANT_ALL_IPV4/6 flag
* fix multicast-via-unicast transmission with AP isolation
* fix packet loss for broadcasted DHCP packets to a server

v2018.1-maint 2018-06-03
========================

* Avoid race in TT TVLV allocator helper
* Fix TT sync flags for intermediate TT responses
* prevent TT request storms by not sending inconsistent TT TLVLs
* Fix bat_ogm_iv best gw refcnt after netlink dump
* Fix bat_v best gw refcnt after netlink dump
* Fix debugfs path for renamed hardif
* Fix debugfs path for renamed softif

Signed-off-by: Sven Eckelmann <sven@narfation.org>
2018-06-03 19:02:42 +02:00

210 lines
9.2 KiB
Diff

From: Sven Eckelmann <sven@narfation.org>
Date: Tue, 26 Dec 2017 13:07:40 +0100
Subject: batman-adv: Merge bugfixes from 2017.4
* Fix lock for ogm cnt access in batadv_iv_ogm_calc_tq
* Fix check of retrieved orig_gw in batadv_v_gw_is_eligible
* Always initialize fragment header priority
* Avoid spurious warnings from bat_v neigh_cmp implementation
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Origin: backport, https://github.com/openwrt-routing/packages/commit/285c803c0a39d05d9a5906ba844981a10647b088
diff --git a/batman-adv/Makefile b/batman-adv/Makefile
index d51bc65bbdc9d1511d4f0bbc9d3a8a13ebc34201..d3d68160662894887eb9fa43c78fdd7479764b7c 100644
--- a/batman-adv/Makefile
+++ b/batman-adv/Makefile
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=batman-adv
PKG_VERSION:=2017.2
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_MD5SUM:=937b5f1d0188e3522d67ad45ee0a4f5a
PKG_HASH:=d487974e21cb53d39f139e93a2cf297807df5b7bf63ba6d810bad6d91537394f
diff --git a/batman-adv/patches/0002-batman-adv-Avoid-spurious-warnings-from-bat_v-neigh_.patch b/batman-adv/patches/0002-batman-adv-Avoid-spurious-warnings-from-bat_v-neigh_.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3ccb9493ee82cb3ab8433d0d88b3871fad227061
--- /dev/null
+++ b/batman-adv/patches/0002-batman-adv-Avoid-spurious-warnings-from-bat_v-neigh_.patch
@@ -0,0 +1,56 @@
+From: Sven Eckelmann <sven.eckelmann@openmesh.com>
+Date: Mon, 16 Oct 2017 09:48:03 +0200
+Subject: [PATCH] batman-adv: Avoid spurious warnings from bat_v neigh_cmp implementation
+
+The neighbor compare API implementation for B.A.T.M.A.N. V checks whether
+the neigh_ifinfo for this neighbor on a specific interface exists. A
+warning is printed when it isn't found.
+
+But it is not called inside a lock which would prevent that this
+information is lost right before batadv_neigh_ifinfo_get. It must therefore
+be expected that batadv_v_neigh_(cmp|is_sob) might not be able to get the
+requested neigh_ifinfo.
+
+A WARN_ON for such a situation seems not to be appropriate because this
+will only flood the kernel logs. The warnings must therefore be removed.
+
+Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
+Acked-by: Antonio Quartulli <a@unstable.cc>
+
+Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/0dee8aba4702f82197ed3428ede6b3884fdff5ca
+---
+ net/batman-adv/bat_v.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
+index 4e2724c5b33d8bda27339ffe65fc7d76f91fd119..1a46382a6008d5b6ba4f2c71aa07df761d544457 100644
+--- a/net/batman-adv/bat_v.c
++++ b/net/batman-adv/bat_v.c
+@@ -623,11 +623,11 @@ static int batadv_v_neigh_cmp(struct batadv_neigh_node *neigh1,
+ int ret = 0;
+
+ ifinfo1 = batadv_neigh_ifinfo_get(neigh1, if_outgoing1);
+- if (WARN_ON(!ifinfo1))
++ if (!ifinfo1)
+ goto err_ifinfo1;
+
+ ifinfo2 = batadv_neigh_ifinfo_get(neigh2, if_outgoing2);
+- if (WARN_ON(!ifinfo2))
++ if (!ifinfo2)
+ goto err_ifinfo2;
+
+ ret = ifinfo1->bat_v.throughput - ifinfo2->bat_v.throughput;
+@@ -649,11 +649,11 @@ static bool batadv_v_neigh_is_sob(struct batadv_neigh_node *neigh1,
+ bool ret = false;
+
+ ifinfo1 = batadv_neigh_ifinfo_get(neigh1, if_outgoing1);
+- if (WARN_ON(!ifinfo1))
++ if (!ifinfo1)
+ goto err_ifinfo1;
+
+ ifinfo2 = batadv_neigh_ifinfo_get(neigh2, if_outgoing2);
+- if (WARN_ON(!ifinfo2))
++ if (!ifinfo2)
+ goto err_ifinfo2;
+
+ threshold = ifinfo1->bat_v.throughput / 4;
diff --git a/batman-adv/patches/0003-batman-adv-Always-initialize-fragment-header-priorit.patch b/batman-adv/patches/0003-batman-adv-Always-initialize-fragment-header-priorit.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0d30dbc520ba73bd6cb86ecbba02d8a5a96f0745
--- /dev/null
+++ b/batman-adv/patches/0003-batman-adv-Always-initialize-fragment-header-priorit.patch
@@ -0,0 +1,30 @@
+From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
+Date: Wed, 29 Nov 2017 10:25:02 +0100
+Subject: [PATCH] batman-adv: Always initialize fragment header priority
+
+The batman-adv unuicast fragment header contains 3 bits for the priority of
+the packet. These bits will be initialized when the skb->priority contains
+a value between 256 and 263. But otherwise, the uninitialized bits from the
+stack will be used.
+
+Fixes: 4f241fcea704 ("batman-adv: Include frame priority in fragment header")
+Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
+
+Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/e45a75c82feae23a20d2744ccfde03780ccdafc7
+---
+ net/batman-adv/fragmentation.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
+index a98cf1104a30a30e66fb6018bef59dea83dc4b7a..ebe6e38934e46ed5de4d30204e791dbe40285fcc 100644
+--- a/net/batman-adv/fragmentation.c
++++ b/net/batman-adv/fragmentation.c
+@@ -499,6 +499,8 @@ int batadv_frag_send_packet(struct sk_buff *skb,
+ */
+ if (skb->priority >= 256 && skb->priority <= 263)
+ frag_header.priority = skb->priority - 256;
++ else
++ frag_header.priority = 0;
+
+ ether_addr_copy(frag_header.orig, primary_if->net_dev->dev_addr);
+ ether_addr_copy(frag_header.dest, orig_node->orig);
diff --git a/batman-adv/patches/0004-batman-adv-Fix-check-of-retrieved-orig_gw-in-batadv_.patch b/batman-adv/patches/0004-batman-adv-Fix-check-of-retrieved-orig_gw-in-batadv_.patch
new file mode 100644
index 0000000000000000000000000000000000000000..05b0f91d039b634f80022367b85674e168de8056
--- /dev/null
+++ b/batman-adv/patches/0004-batman-adv-Fix-check-of-retrieved-orig_gw-in-batadv_.patch
@@ -0,0 +1,31 @@
+From: Sven Eckelmann <sven.eckelmann@openmesh.com>
+Date: Wed, 29 Nov 2017 10:50:42 +0100
+Subject: [PATCH] batman-adv: Fix check of retrieved orig_gw in batadv_v_gw_is_eligible
+
+The batadv_v_gw_is_eligible function already assumes that orig_node is not
+NULL. But batadv_gw_node_get may have failed to find the originator. It
+must therefore be checked whether the batadv_gw_node_get failed and not
+whether orig_node is NULL to detect this error.
+
+Fixes: 80b2d47be2c7 ("batman-adv: B.A.T.M.A.N. V - implement GW selection logic")
+Signed-off-by: Sven Eckelmann <sven.eckelmann@openmesh.com>
+Acked-by: Antonio Quartulli <a@unstable.cc>
+
+Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/c7380677d6167f3798d3ea7a4f1a93663f3c7915
+---
+ net/batman-adv/bat_v.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
+index 1a46382a6008d5b6ba4f2c71aa07df761d544457..cb227bcdc35c3a48b3fd85cd2749730bf857c704 100644
+--- a/net/batman-adv/bat_v.c
++++ b/net/batman-adv/bat_v.c
+@@ -815,7 +815,7 @@ static bool batadv_v_gw_is_eligible(struct batadv_priv *bat_priv,
+ }
+
+ orig_gw = batadv_gw_node_get(bat_priv, orig_node);
+- if (!orig_node)
++ if (!orig_gw)
+ goto out;
+
+ if (batadv_v_gw_throughput_get(orig_gw, &orig_throughput) < 0)
diff --git a/batman-adv/patches/0005-batman-adv-Fix-lock-for-ogm-cnt-access-in-batadv_iv_.patch b/batman-adv/patches/0005-batman-adv-Fix-lock-for-ogm-cnt-access-in-batadv_iv_.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d4685faf23dd4e0fd4a7f46745f3f2f4ec82bffa
--- /dev/null
+++ b/batman-adv/patches/0005-batman-adv-Fix-lock-for-ogm-cnt-access-in-batadv_iv_.patch
@@ -0,0 +1,42 @@
+From: Sven Eckelmann <sven@narfation.org>
+Date: Sun, 3 Dec 2017 11:26:45 +0100
+Subject: [PATCH] batman-adv: Fix lock for ogm cnt access in batadv_iv_ogm_calc_tq
+
+The originator node object orig_neigh_node is used to when accessing the
+bcast_own(_sum) and real_packet_count information. The access to them has
+to be protected with the spinlock in orig_neigh_node.
+
+But the function uses the lock in orig_node instead. This is incorrect
+because they could be two different originator node objects.
+
+Fixes: f14416760b62 ("batman-adv: protect bit operations to count OGMs with spinlock")
+Signed-off-by: Sven Eckelmann <sven@narfation.org>
+Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
+
+Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/9a3b195410e5d2f285cdf0073fef721ff8d9474d
+---
+ net/batman-adv/bat_iv_ogm.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
+index 8769fa1b17c8486e68041ee15fae08178b75567f..0f9749c780056df271c1b1167299de75dbdbd770 100644
+--- a/net/batman-adv/bat_iv_ogm.c
++++ b/net/batman-adv/bat_iv_ogm.c
+@@ -1214,7 +1214,7 @@ static bool batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node,
+ orig_node->last_seen = jiffies;
+
+ /* find packet count of corresponding one hop neighbor */
+- spin_lock_bh(&orig_node->bat_iv.ogm_cnt_lock);
++ spin_lock_bh(&orig_neigh_node->bat_iv.ogm_cnt_lock);
+ if_num = if_incoming->if_num;
+ orig_eq_count = orig_neigh_node->bat_iv.bcast_own_sum[if_num];
+ neigh_ifinfo = batadv_neigh_ifinfo_new(neigh_node, if_outgoing);
+@@ -1224,7 +1224,7 @@ static bool batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node,
+ } else {
+ neigh_rq_count = 0;
+ }
+- spin_unlock_bh(&orig_node->bat_iv.ogm_cnt_lock);
++ spin_unlock_bh(&orig_neigh_node->bat_iv.ogm_cnt_lock);
+
+ /* pay attention to not get a value bigger than 100 % */
+ if (orig_eq_count > neigh_rq_count)