batman-adv: update to version 2022.1
authorSven Eckelmann <sven@narfation.org>
Fri, 6 May 2022 19:51:41 +0000 (21:51 +0200)
committerSven Eckelmann <sven@narfation.org>
Fri, 6 May 2022 20:09:55 +0000 (22:09 +0200)
* support latest kernels (4.9 - 5.18)
* bugs squashed:

  - resolve "time-of-check-time-of-use" race condition when checking the
    network namespace of a lower device
  - fix sanity check of network devices in different namespaces with
    colliding IDs
  - prevent transmission errors after splitting large GRO packets into
    smaller fragments

Signed-off-by: Sven Eckelmann <sven@narfation.org>
batman-adv/Makefile
batman-adv/patches/0001-batman-adv-Fix-build-of-multicast-code-against-Linux.patch
batman-adv/patches/0004-Revert-batman-adv-Migrate-to-linux-container_of.h.patch [new file with mode: 0644]
batman-adv/patches/0004-batman-adv-make-mc_forwarding-atomic.patch [deleted file]
batman-adv/patches/0005-batman-adv-compat-Add-atomic-mc_fowarding-support-fo.patch [deleted file]
batman-adv/src/compat-hacks.h

index 3ec2321341e13f8b9a47eeb6ae40ab111304ced4..55468d3bacada15ed0d7d3cbe9990689532d443c 100644 (file)
@@ -3,12 +3,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=batman-adv
-PKG_VERSION:=2022.0
+PKG_VERSION:=2022.1
 PKG_RELEASE:=$(AUTORELEASE)
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION)
-PKG_HASH:=49338705bc207709ac84d766688e702571009c827c0a320788ea51fb887714aa
+PKG_HASH:=6d041d3530abd4b249abf5a96fc2a2e241431bf9443b547fdb25a2d8fd329a40
 PKG_EXTMOD_SUBDIRS:=net/batman-adv
 
 PKG_MAINTAINER:=Simon Wunderlich <sw@simonwunderlich.de>
index 6fecb6cd3778ce61d474adf3ffe712c8012e38b6..4a84f5fffc78f9f7c5a90df12f24b00e9b93d176 100644 (file)
@@ -7,7 +7,7 @@ Signed-off-by: Sven Eckelmann <sven@narfation.org>
 
 --- a/net/batman-adv/multicast.c
 +++ b/net/batman-adv/multicast.c
-@@ -422,9 +422,14 @@ batadv_mcast_mla_softif_get_ipv6(struct
+@@ -431,9 +431,14 @@ batadv_mcast_mla_softif_get_ipv6(struct
                return 0;
        }
  
@@ -22,7 +22,7 @@ Signed-off-by: Sven Eckelmann <sven@narfation.org>
                if (IPV6_ADDR_MC_SCOPE(&pmc6->mca_addr) <
                    IPV6_ADDR_SCOPE_LINKLOCAL)
                        continue;
-@@ -453,6 +458,9 @@ batadv_mcast_mla_softif_get_ipv6(struct
+@@ -462,6 +467,9 @@ batadv_mcast_mla_softif_get_ipv6(struct
                hlist_add_head(&new->list, mcast_list);
                ret++;
        }
diff --git a/batman-adv/patches/0004-Revert-batman-adv-Migrate-to-linux-container_of.h.patch b/batman-adv/patches/0004-Revert-batman-adv-Migrate-to-linux-container_of.h.patch
new file mode 100644 (file)
index 0000000..a217ba6
--- /dev/null
@@ -0,0 +1,269 @@
+From: Sven Eckelmann <sven@narfation.org>
+Date: Fri, 6 May 2022 22:03:29 +0200
+Subject: Revert "batman-adv: Migrate to linux/container_of.h"
+
+This reverts commit 043ae5634bdfd4c4dd8b95a22890752495080bb5.
+
+--- a/compat-include/linux/container_of.h
++++ /dev/null
+@@ -1,20 +0,0 @@
+-/* SPDX-License-Identifier: GPL-2.0 */
+-/* Copyright (C) B.A.T.M.A.N. contributors:
+- *
+- * Marek Lindner, Simon Wunderlich
+- *
+- * This file contains macros for maintaining compatibility with older versions
+- * of the Linux kernel.
+- */
+-
+-#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_CONTAINER_OF_H_
+-#define _NET_BATMAN_ADV_COMPAT_LINUX_CONTAINER_OF_H_
+-
+-#include <linux/version.h>
+-#if LINUX_VERSION_IS_GEQ(5, 16, 0)
+-#include_next <linux/container_of.h>
+-#else
+-#include <linux/kernel.h>
+-#endif
+-
+-#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_CONTAINER_OF_H_ */
+--- a/net/batman-adv/bat_iv_ogm.c
++++ b/net/batman-adv/bat_iv_ogm.c
+@@ -13,13 +13,13 @@
+ #include <linux/bug.h>
+ #include <linux/byteorder/generic.h>
+ #include <linux/cache.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+ #include <linux/if_ether.h>
+ #include <linux/init.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
+--- a/net/batman-adv/bat_v_elp.c
++++ b/net/batman-adv/bat_v_elp.c
+@@ -10,13 +10,13 @@
+ #include <linux/atomic.h>
+ #include <linux/bitops.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/ethtool.h>
+ #include <linux/gfp.h>
+ #include <linux/if_ether.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/minmax.h>
+ #include <linux/netdevice.h>
+--- a/net/batman-adv/bat_v_ogm.c
++++ b/net/batman-adv/bat_v_ogm.c
+@@ -9,12 +9,12 @@
+ #include <linux/atomic.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+ #include <linux/if_ether.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
+--- a/net/batman-adv/bridge_loop_avoidance.c
++++ b/net/batman-adv/bridge_loop_avoidance.c
+@@ -10,7 +10,6 @@
+ #include <linux/atomic.h>
+ #include <linux/byteorder/generic.h>
+ #include <linux/compiler.h>
+-#include <linux/container_of.h>
+ #include <linux/crc16.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+--- a/net/batman-adv/distributed-arp-table.c
++++ b/net/batman-adv/distributed-arp-table.c
+@@ -11,7 +11,6 @@
+ #include <linux/atomic.h>
+ #include <linux/bitops.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+@@ -21,6 +20,7 @@
+ #include <linux/in.h>
+ #include <linux/ip.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/netlink.h>
+--- a/net/batman-adv/gateway_client.c
++++ b/net/batman-adv/gateway_client.c
+@@ -9,7 +9,6 @@
+ #include <linux/atomic.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+--- a/net/batman-adv/hard-interface.c
++++ b/net/batman-adv/hard-interface.c
+@@ -9,11 +9,11 @@
+ #include <linux/atomic.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/gfp.h>
+ #include <linux/if.h>
+ #include <linux/if_arp.h>
+ #include <linux/if_ether.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/limits.h>
+ #include <linux/list.h>
+--- a/net/batman-adv/main.c
++++ b/net/batman-adv/main.c
+@@ -9,7 +9,6 @@
+ #include <linux/atomic.h>
+ #include <linux/build_bug.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/crc32c.h>
+ #include <linux/device.h>
+ #include <linux/errno.h>
+--- a/net/batman-adv/multicast.c
++++ b/net/batman-adv/multicast.c
+@@ -11,7 +11,6 @@
+ #include <linux/bitops.h>
+ #include <linux/bug.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+--- a/net/batman-adv/network-coding.c
++++ b/net/batman-adv/network-coding.c
+@@ -11,7 +11,6 @@
+ #include <linux/bitops.h>
+ #include <linux/byteorder/generic.h>
+ #include <linux/compiler.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+@@ -20,6 +19,7 @@
+ #include <linux/init.h>
+ #include <linux/jhash.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
+--- a/net/batman-adv/originator.c
++++ b/net/batman-adv/originator.c
+@@ -8,11 +8,11 @@
+ #include "main.h"
+ #include <linux/atomic.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
+--- a/net/batman-adv/send.c
++++ b/net/batman-adv/send.c
+@@ -10,13 +10,13 @@
+ #include <linux/atomic.h>
+ #include <linux/bug.h>
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+ #include <linux/if.h>
+ #include <linux/if_ether.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/netdevice.h>
+--- a/net/batman-adv/soft-interface.c
++++ b/net/batman-adv/soft-interface.c
+@@ -11,7 +11,6 @@
+ #include <linux/byteorder/generic.h>
+ #include <linux/cache.h>
+ #include <linux/compiler.h>
+-#include <linux/container_of.h>
+ #include <linux/cpumask.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+@@ -20,6 +19,7 @@
+ #include <linux/if_ether.h>
+ #include <linux/if_vlan.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
+--- a/net/batman-adv/tp_meter.c
++++ b/net/batman-adv/tp_meter.c
+@@ -12,13 +12,13 @@
+ #include <linux/byteorder/generic.h>
+ #include <linux/cache.h>
+ #include <linux/compiler.h>
+-#include <linux/container_of.h>
+ #include <linux/err.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+ #include <linux/if_ether.h>
+ #include <linux/init.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/kthread.h>
+ #include <linux/limits.h>
+--- a/net/batman-adv/translation-table.c
++++ b/net/batman-adv/translation-table.c
+@@ -13,7 +13,6 @@
+ #include <linux/byteorder/generic.h>
+ #include <linux/cache.h>
+ #include <linux/compiler.h>
+-#include <linux/container_of.h>
+ #include <linux/crc32c.h>
+ #include <linux/errno.h>
+ #include <linux/etherdevice.h>
+@@ -22,6 +21,7 @@
+ #include <linux/init.h>
+ #include <linux/jhash.h>
+ #include <linux/jiffies.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
+--- a/net/batman-adv/tvlv.c
++++ b/net/batman-adv/tvlv.c
+@@ -7,10 +7,10 @@
+ #include "main.h"
+ #include <linux/byteorder/generic.h>
+-#include <linux/container_of.h>
+ #include <linux/etherdevice.h>
+ #include <linux/gfp.h>
+ #include <linux/if_ether.h>
++#include <linux/kernel.h>
+ #include <linux/kref.h>
+ #include <linux/list.h>
+ #include <linux/lockdep.h>
diff --git a/batman-adv/patches/0004-batman-adv-make-mc_forwarding-atomic.patch b/batman-adv/patches/0004-batman-adv-make-mc_forwarding-atomic.patch
deleted file mode 100644 (file)
index d72882e..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-From: Eric Dumazet <edumazet@google.com>
-Date: Wed, 2 Mar 2022 20:05:13 +0100
-Subject: batman-adv: make mc_forwarding atomic
-
-This fixes minor data-races in ip6_mc_input() and
-batadv_mcast_mla_rtr_flags_softif_get_ipv6()
-
-Signed-off-by: Eric Dumazet <edumazet@google.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-[sven@narfation.org: Add ugly hack to get it building with old kernels]
-Signed-off-by: Sven Eckelmann <sven@narfation.org>
-Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/56db7c0540e733a1f063ccd6bab1b537a80857eb
-
---- a/net/batman-adv/multicast.c
-+++ b/net/batman-adv/multicast.c
-@@ -134,7 +134,11 @@ static u8 batadv_mcast_mla_rtr_flags_sof
- {
-       struct inet6_dev *in6_dev = __in6_dev_get(dev);
-+#if LINUX_VERSION_IS_GEQ(5, 18, 0) // UGLY_HACK_NEW
-+      if (in6_dev && atomic_read(&in6_dev->cnf.mc_forwarding))
-+#else // UGLY_HACK_OLD
-       if (in6_dev && in6_dev->cnf.mc_forwarding)
-+#endif // UGLY_HACK_STOP
-               return BATADV_NO_FLAGS;
-       else
-               return BATADV_MCAST_WANT_NO_RTR6;
diff --git a/batman-adv/patches/0005-batman-adv-compat-Add-atomic-mc_fowarding-support-fo.patch b/batman-adv/patches/0005-batman-adv-compat-Add-atomic-mc_fowarding-support-fo.patch
deleted file mode 100644 (file)
index 9d5f0ac..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Sven Eckelmann <sven@narfation.org>
-Date: Fri, 15 Apr 2022 15:12:45 +0200
-Subject: batman-adv: compat: Add atomic mc_fowarding support for stable kernels
-
-Fixes: 56db7c0540e7 ("batman-adv: make mc_forwarding atomic")
-Signed-off-by: Sven Eckelmann <sven@narfation.org>
-Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/350adcaec82fbaa358a2406343b6130ac8dad126
-
---- a/net/batman-adv/multicast.c
-+++ b/net/batman-adv/multicast.c
-@@ -134,7 +134,11 @@ static u8 batadv_mcast_mla_rtr_flags_sof
- {
-       struct inet6_dev *in6_dev = __in6_dev_get(dev);
--#if LINUX_VERSION_IS_GEQ(5, 18, 0) // UGLY_HACK_NEW
-+#if (LINUX_VERSION_IS_GEQ(5, 4, 189) && LINUX_VERSION_IS_LESS(5, 5, 0)) || /* UGLY_HACK */ \
-+    (LINUX_VERSION_IS_GEQ(5, 10, 111) && LINUX_VERSION_IS_LESS(5, 11, 0)) || /* UGLY_HACK */ \
-+    (LINUX_VERSION_IS_GEQ(5, 15, 34) && LINUX_VERSION_IS_LESS(5, 16, 0)) || /* UGLY_HACK */ \
-+    (LINUX_VERSION_IS_GEQ(5, 16, 20) && LINUX_VERSION_IS_LESS(5, 17, 0)) || /* UGLY_HACK */ \
-+    LINUX_VERSION_IS_GEQ(5, 17, 3) // UGLY_HACK_NEW
-       if (in6_dev && atomic_read(&in6_dev->cnf.mc_forwarding))
- #else // UGLY_HACK_OLD
-       if (in6_dev && in6_dev->cnf.mc_forwarding)
index 74107b6705b097f048ffd2ed16c56fbf8fdbf7d0..8b8ac53b84d578897d9b5f38167455febbc5b115 100644 (file)
@@ -59,6 +59,19 @@ static inline void batadv_eth_hw_addr_set(struct net_device *dev,
 
 #endif /* LINUX_VERSION_IS_LESS(5, 15, 0) */
 
+#if LINUX_VERSION_IS_LESS(5, 18, 0)
+
+static inline int batadv_netif_rx(struct sk_buff *skb)
+{
+       if (in_interrupt())
+               return netif_rx(skb);
+       else
+               return netif_rx_ni(skb);
+}
+#define netif_rx batadv_netif_rx
+
+#endif /* LINUX_VERSION_IS_LESS(5, 18, 0) */
+
 /* <DECLARE_EWMA> */
 
 #include <linux/version.h>