From c8734df677192d09326514d0190af24469a9329e Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 19 Nov 2021 17:12:00 +0100 Subject: [PATCH 1/2] batman-adv: Refresh patches with quilt The test builds are now requiring quilt refreshed patches instead of git patches. Otherwise the build check will not even try to build something. Signed-off-by: Sven Eckelmann --- ...v-convert-stream-like-files-from-non.patch | 12 +- ...v-compat-Drop-support-for-genl_ops-s.patch | 4 +- ...v-genetlink-optionally-validate-stri.patch | 18 +- ...v-genetlink-make-policy-common-to-fa.patch | 18 +- ...adv-Fix-duplicated-OGMs-on-NETDEV_UP.patch | 12 +- ...etlink-dumping-of-all-mcast_flags-bu.patch | 4 +- ...ninit-value-in-batadv_netlink_get_if.patch | 4 +- ...read-OGM-tvlv_len-after-buffer-len-c.patch | 8 +- ...read-OGM2-tvlv_len-after-buffer-len-.patch | 6 +- ...-free-alloc-race-when-handling-OGM2-.patch | 20 +- ...lize-struct-batadv_tvlv_tt_vlan_dat.patch} | 6 +- ...free-alloc-race-when-handling-OGM-b.patch} | 18 +- ...adv-Introduce-own-OGM2-buffer-mutex.patch} | 16 +- ...OGM-workqueue-synchronous-cancel-de.patch} | 24 +- ...T-candidate-selection-on-little-end.patch} | 6 +- ...schedule-OGM-for-disabled-interface.patch} | 4 +- ...-adv-fix-batadv_nc_random_weight_tq.patch} | 4 +- ...fcnt-leak-in-batadv_show_throughput.patch} | 4 +- ...fcnt-leak-in-batadv_store_throughpu.patch} | 4 +- ...refcnt-leak-in-batadv_v_ogm_process.patch} | 4 +- ...-disable-ethtool-link-speed-detecti.patch} | 8 +- ...uninitialized-chaddr-when-handling-.patch} | 4 +- ...ix-own-OGM-check-in-aggregated-OGMs.patch} | 6 +- ...e-netif_rx_ni-when-not-in-interrupt.patch} | 4 +- ...x-type-misuse-for-backbone_gw-hash-.patch} | 4 +- ...TT-fix-wrongly-dropped-or-rerouted-.patch} | 4 +- ...dd-missing-include-for-in_interrupt.patch} | 2 - ...-fix-duplicate-mcast-packets-in-BLA-.patch | 170 ----------- ...-fix-duplicate-mcast-packets-in-BLA-.patch | 282 +++++++++--------- ...-fix-duplicate-mcast-packets-in-BLA-.patch | 150 ++++++++++ ...fix-duplicate-mcast-packets-from-BL.patch} | 29 +- ...atman-adv-set-.owner-to-THIS_MODULE.patch} | 4 +- ...er-fragmentation-for-needed_headroo.patch} | 4 +- ...-Reserve-needed_-room-for-fragments.patch} | 10 +- ...always-reallocate-the-fragmentation.patch} | 4 +- ...Avoid-WARN_ON-timing-related-checks.patch} | 4 +- 36 files changed, 391 insertions(+), 494 deletions(-) rename batman-adv/patches/{0010-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch => 0011-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch} (81%) rename batman-adv/patches/{0011-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch => 0012-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch} (80%) rename batman-adv/patches/{0012-batman-adv-Introduce-own-OGM2-buffer-mutex.patch => 0013-batman-adv-Introduce-own-OGM2-buffer-mutex.patch} (82%) rename batman-adv/patches/{0013-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch => 0014-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch} (85%) rename batman-adv/patches/{0014-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch => 0015-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch} (81%) rename batman-adv/patches/{0015-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch => 0016-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch} (84%) rename batman-adv/patches/{0016-batman-adv-fix-batadv_nc_random_weight_tq.patch => 0017-batman-adv-fix-batadv_nc_random_weight_tq.patch} (88%) rename batman-adv/patches/{0017-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch => 0018-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch} (85%) rename batman-adv/patches/{0018-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch => 0019-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch} (85%) rename batman-adv/patches/{0019-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch => 0020-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch} (84%) rename batman-adv/patches/{0020-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch => 0021-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch} (84%) rename batman-adv/patches/{0021-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch => 0022-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch} (86%) rename batman-adv/patches/{0022-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch => 0023-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch} (86%) rename batman-adv/patches/{0023-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch => 0024-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch} (78%) rename batman-adv/patches/{0024-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch => 0025-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch} (85%) rename batman-adv/patches/{0025-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch => 0026-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch} (88%) rename batman-adv/patches/{0026-batman-adv-Add-missing-include-for-in_interrupt.patch => 0027-batman-adv-Add-missing-include-for-in_interrupt.patch} (83%) delete mode 100644 batman-adv/patches/0027-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch create mode 100644 batman-adv/patches/0029-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch rename batman-adv/patches/{0029-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch => 0030-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch} (92%) rename batman-adv/patches/{0030-batman-adv-set-.owner-to-THIS_MODULE.patch => 0031-batman-adv-set-.owner-to-THIS_MODULE.patch} (76%) rename batman-adv/patches/{0031-batman-adv-Consider-fragmentation-for-needed_headroo.patch => 0032-batman-adv-Consider-fragmentation-for-needed_headroo.patch} (81%) rename batman-adv/patches/{0032-batman-adv-Reserve-needed_-room-for-fragments.patch => 0033-batman-adv-Reserve-needed_-room-for-fragments.patch} (86%) rename batman-adv/patches/{0033-batman-adv-Don-t-always-reallocate-the-fragmentation.patch => 0034-batman-adv-Don-t-always-reallocate-the-fragmentation.patch} (85%) rename batman-adv/patches/{0001-batman-adv-Avoid-WARN_ON-timing-related-checks.patch => 0035-batman-adv-Avoid-WARN_ON-timing-related-checks.patch} (82%) diff --git a/batman-adv/patches/0001-Revert-batman-adv-convert-stream-like-files-from-non.patch b/batman-adv/patches/0001-Revert-batman-adv-convert-stream-like-files-from-non.patch index 201e327..74dd54e 100644 --- a/batman-adv/patches/0001-Revert-batman-adv-convert-stream-like-files-from-non.patch +++ b/batman-adv/patches/0001-Revert-batman-adv-convert-stream-like-files-from-non.patch @@ -7,11 +7,9 @@ API of Linux 5.2. This reverts commit 337ae19a00d4455cf84afa58abfb432f78c882b9. -diff --git a/compat-include/linux/fs.h b/compat-include/linux/fs.h -index 480722f04ba7ddefc837d5e55a340271e0814b14..c52e0e8e87584d106ab64ef2c522e6ac1ff6e796 100644 --- a/compat-include/linux/fs.h +++ b/compat-include/linux/fs.h -@@ -31,15 +31,4 @@ static inline struct dentry *batadv_file_dentry(const struct file *file) +@@ -31,15 +31,4 @@ static inline struct dentry *batadv_file #endif /* < KERNEL_VERSION(4, 6, 0) */ @@ -27,11 +25,9 @@ index 480722f04ba7ddefc837d5e55a340271e0814b14..c52e0e8e87584d106ab64ef2c522e6ac -#endif /* < KERNEL_VERSION(5, 2, 0) */ - #endif /* _NET_BATMAN_ADV_COMPAT_LINUX_FS_H_ */ -diff --git a/net/batman-adv/icmp_socket.c b/net/batman-adv/icmp_socket.c -index 0a91c8661357d4ddbea1ba20dcd0df67b8ba5a97..de81b5ecad91afd8d684edbf781c70a3bae38c60 100644 --- a/net/batman-adv/icmp_socket.c +++ b/net/batman-adv/icmp_socket.c -@@ -65,7 +65,7 @@ static int batadv_socket_open(struct inode *inode, struct file *file) +@@ -65,7 +65,7 @@ static int batadv_socket_open(struct ino batadv_debugfs_deprecated(file, ""); @@ -40,11 +36,9 @@ index 0a91c8661357d4ddbea1ba20dcd0df67b8ba5a97..de81b5ecad91afd8d684edbf781c70a3 socket_client = kmalloc(sizeof(*socket_client), GFP_KERNEL); if (!socket_client) { -diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c -index f79ebd5b46e95b3b6de717c7ea1ecf44e5c96051..60ce11e16a905e790424a2d7aca81c1f945c1ec2 100644 --- a/net/batman-adv/log.c +++ b/net/batman-adv/log.c -@@ -90,7 +90,7 @@ static int batadv_log_open(struct inode *inode, struct file *file) +@@ -90,7 +90,7 @@ static int batadv_log_open(struct inode batadv_debugfs_deprecated(file, "Use tracepoint batadv:batadv_dbg instead\n"); diff --git a/batman-adv/patches/0002-Revert-batman-adv-compat-Drop-support-for-genl_ops-s.patch b/batman-adv/patches/0002-Revert-batman-adv-compat-Drop-support-for-genl_ops-s.patch index e3b7dec..38615f7 100644 --- a/batman-adv/patches/0002-Revert-batman-adv-compat-Drop-support-for-genl_ops-s.patch +++ b/batman-adv/patches/0002-Revert-batman-adv-compat-Drop-support-for-genl_ops-s.patch @@ -7,8 +7,6 @@ API of Linux 5.2. This reverts commit 1d30dbe3917d0d6fdb8ba473dfdd6265ac46670b. -diff --git a/compat-include/net/genetlink.h b/compat-include/net/genetlink.h -index ee5b82288be97193c1a8e8340a2ea7e0c7ce112c..fbfdb733a3dd63c251def43cae416c7fe32cadab 100644 --- a/compat-include/net/genetlink.h +++ b/compat-include/net/genetlink.h @@ -42,6 +42,7 @@ enum genl_validate_flags { @@ -19,7 +17,7 @@ index ee5b82288be97193c1a8e8340a2ea7e0c7ce112c..fbfdb733a3dd63c251def43cae416c7f int (*dumpit)(struct sk_buff *skb, struct netlink_callback *cb); int (*done)(struct netlink_callback *cb); -@@ -104,6 +105,7 @@ static inline int batadv_genl_register_family(struct batadv_genl_family *family) +@@ -104,6 +105,7 @@ static inline int batadv_genl_register_f for (i = 0; i < family->family.n_ops; i++) { ops[i].doit = family->ops[i].doit; diff --git a/batman-adv/patches/0003-Revert-batman-adv-genetlink-optionally-validate-stri.patch b/batman-adv/patches/0003-Revert-batman-adv-genetlink-optionally-validate-stri.patch index c383c69..f0e7cd1 100644 --- a/batman-adv/patches/0003-Revert-batman-adv-genetlink-optionally-validate-stri.patch +++ b/batman-adv/patches/0003-Revert-batman-adv-genetlink-optionally-validate-stri.patch @@ -7,11 +7,9 @@ API of Linux 5.2. This reverts commit 2ee47abaeb35ca62bb909830e10b0e973393b853. -diff --git a/compat-include/net/genetlink.h b/compat-include/net/genetlink.h -index fbfdb733a3dd63c251def43cae416c7fe32cadab..7d17a705273650355f074788e9220fc4981b0db1 100644 --- a/compat-include/net/genetlink.h +++ b/compat-include/net/genetlink.h -@@ -33,25 +33,6 @@ void batadv_genl_dump_check_consistent(struct netlink_callback *cb, +@@ -33,25 +33,6 @@ void batadv_genl_dump_check_consistent(s #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 2, 0) @@ -55,7 +53,7 @@ index fbfdb733a3dd63c251def43cae416c7fe32cadab..7d17a705273650355f074788e9220fc4 static inline int batadv_genl_register_family(struct batadv_genl_family *family) { struct genl_ops *ops; -@@ -99,20 +82,12 @@ static inline int batadv_genl_register_family(struct batadv_genl_family *family) +@@ -99,20 +82,12 @@ static inline int batadv_genl_register_f family->family.n_mcgrps = family->n_mcgrps; family->family.module = family->module; @@ -78,7 +76,7 @@ index fbfdb733a3dd63c251def43cae416c7fe32cadab..7d17a705273650355f074788e9220fc4 family->family.ops = ops; family->copy_ops = ops; -@@ -120,17 +95,6 @@ static inline int batadv_genl_register_family(struct batadv_genl_family *family) +@@ -120,17 +95,6 @@ static inline int batadv_genl_register_f return genl_register_family(&family->family); } @@ -96,11 +94,9 @@ index fbfdb733a3dd63c251def43cae416c7fe32cadab..7d17a705273650355f074788e9220fc4 #define genl_register_family(family) \ batadv_genl_register_family((family)) -diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c -index a67720fad46ca496c932c0306e2f7ec4ed496fc9..e7907308b331ddc3e4917ff7d648bca27a65536b 100644 --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c -@@ -1343,34 +1343,29 @@ static void batadv_post_doit(const struct genl_ops *ops, struct sk_buff *skb, +@@ -1343,34 +1343,29 @@ static void batadv_post_doit(const struc static const struct genl_ops batadv_netlink_ops[] = { { .cmd = BATADV_CMD_GET_MESH, @@ -135,7 +131,7 @@ index a67720fad46ca496c932c0306e2f7ec4ed496fc9..e7907308b331ddc3e4917ff7d648bca2 /* can be retrieved by unprivileged users */ .dumpit = batadv_netlink_dump_hardif, .doit = batadv_netlink_get_hardif, -@@ -1379,68 +1374,57 @@ static const struct genl_ops batadv_netlink_ops[] = { +@@ -1379,68 +1374,57 @@ static const struct genl_ops batadv_netl }, { .cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL, @@ -204,7 +200,7 @@ index a67720fad46ca496c932c0306e2f7ec4ed496fc9..e7907308b331ddc3e4917ff7d648bca2 .flags = GENL_ADMIN_PERM, .doit = batadv_netlink_set_hardif, .internal_flags = BATADV_FLAG_NEED_MESH | -@@ -1448,7 +1432,6 @@ static const struct genl_ops batadv_netlink_ops[] = { +@@ -1448,7 +1432,6 @@ static const struct genl_ops batadv_netl }, { .cmd = BATADV_CMD_GET_VLAN, @@ -212,7 +208,7 @@ index a67720fad46ca496c932c0306e2f7ec4ed496fc9..e7907308b331ddc3e4917ff7d648bca2 /* can be retrieved by unprivileged users */ .doit = batadv_netlink_get_vlan, .internal_flags = BATADV_FLAG_NEED_MESH | -@@ -1456,7 +1439,6 @@ static const struct genl_ops batadv_netlink_ops[] = { +@@ -1456,7 +1439,6 @@ static const struct genl_ops batadv_netl }, { .cmd = BATADV_CMD_SET_VLAN, diff --git a/batman-adv/patches/0004-Revert-batman-adv-genetlink-make-policy-common-to-fa.patch b/batman-adv/patches/0004-Revert-batman-adv-genetlink-make-policy-common-to-fa.patch index a5814e7..f4de313 100644 --- a/batman-adv/patches/0004-Revert-batman-adv-genetlink-make-policy-common-to-fa.patch +++ b/batman-adv/patches/0004-Revert-batman-adv-genetlink-make-policy-common-to-fa.patch @@ -7,8 +7,6 @@ API of Linux 5.2. This reverts commit acfc9a214d01695d1676313ca80cfd2d9309f633. -diff --git a/compat-include/linux/cache.h b/compat-include/linux/cache.h -index 9ddda31232ed4b58efcb57dc2ee99ae82d09d6e2..efe440d11d04a1c3999649ba52058ad82e4d6bea 100644 --- a/compat-include/linux/cache.h +++ b/compat-include/linux/cache.h @@ -13,8 +13,12 @@ @@ -25,11 +23,9 @@ index 9ddda31232ed4b58efcb57dc2ee99ae82d09d6e2..efe440d11d04a1c3999649ba52058ad8 #define __ro_after_init #endif /* < KERNEL_VERSION(4, 6, 0) */ -diff --git a/compat-include/net/genetlink.h b/compat-include/net/genetlink.h -index 7d17a705273650355f074788e9220fc4981b0db1..58fc24d7147a7f79c2db1976b36351d294f2aa4c 100644 --- a/compat-include/net/genetlink.h +++ b/compat-include/net/genetlink.h -@@ -30,92 +30,4 @@ void batadv_genl_dump_check_consistent(struct netlink_callback *cb, +@@ -30,92 +30,4 @@ void batadv_genl_dump_check_consistent(s #endif /* < KERNEL_VERSION(4, 15, 0) */ @@ -122,11 +118,9 @@ index 7d17a705273650355f074788e9220fc4981b0db1..58fc24d7147a7f79c2db1976b36351d2 -#endif /* < KERNEL_VERSION(5, 2, 0) */ - #endif /* _NET_BATMAN_ADV_COMPAT_NET_GENETLINK_H_ */ -diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c -index e7907308b331ddc3e4917ff7d648bca27a65536b..daf56933223d478399c63360203bcf283d7686a3 100644 --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c -@@ -1344,29 +1344,34 @@ static const struct genl_ops batadv_netlink_ops[] = { +@@ -1344,29 +1344,34 @@ static const struct genl_ops batadv_netl { .cmd = BATADV_CMD_GET_MESH, /* can be retrieved by unprivileged users */ @@ -161,7 +155,7 @@ index e7907308b331ddc3e4917ff7d648bca27a65536b..daf56933223d478399c63360203bcf28 .dumpit = batadv_netlink_dump_hardif, .doit = batadv_netlink_get_hardif, .internal_flags = BATADV_FLAG_NEED_MESH | -@@ -1375,57 +1380,68 @@ static const struct genl_ops batadv_netlink_ops[] = { +@@ -1375,57 +1380,68 @@ static const struct genl_ops batadv_netl { .cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL, .flags = GENL_ADMIN_PERM, @@ -230,7 +224,7 @@ index e7907308b331ddc3e4917ff7d648bca27a65536b..daf56933223d478399c63360203bcf28 .doit = batadv_netlink_set_hardif, .internal_flags = BATADV_FLAG_NEED_MESH | BATADV_FLAG_NEED_HARDIF, -@@ -1433,6 +1449,7 @@ static const struct genl_ops batadv_netlink_ops[] = { +@@ -1433,6 +1449,7 @@ static const struct genl_ops batadv_netl { .cmd = BATADV_CMD_GET_VLAN, /* can be retrieved by unprivileged users */ @@ -238,7 +232,7 @@ index e7907308b331ddc3e4917ff7d648bca27a65536b..daf56933223d478399c63360203bcf28 .doit = batadv_netlink_get_vlan, .internal_flags = BATADV_FLAG_NEED_MESH | BATADV_FLAG_NEED_VLAN, -@@ -1440,6 +1457,7 @@ static const struct genl_ops batadv_netlink_ops[] = { +@@ -1440,6 +1457,7 @@ static const struct genl_ops batadv_netl { .cmd = BATADV_CMD_SET_VLAN, .flags = GENL_ADMIN_PERM, @@ -246,7 +240,7 @@ index e7907308b331ddc3e4917ff7d648bca27a65536b..daf56933223d478399c63360203bcf28 .doit = batadv_netlink_set_vlan, .internal_flags = BATADV_FLAG_NEED_MESH | BATADV_FLAG_NEED_VLAN, -@@ -1451,7 +1469,6 @@ struct genl_family batadv_netlink_family __ro_after_init = { +@@ -1451,7 +1469,6 @@ struct genl_family batadv_netlink_family .name = BATADV_NL_NAME, .version = 1, .maxattr = BATADV_ATTR_MAX, diff --git a/batman-adv/patches/0005-batman-adv-Fix-duplicated-OGMs-on-NETDEV_UP.patch b/batman-adv/patches/0005-batman-adv-Fix-duplicated-OGMs-on-NETDEV_UP.patch index 2fc0e19..6c69557 100644 --- a/batman-adv/patches/0005-batman-adv-Fix-duplicated-OGMs-on-NETDEV_UP.patch +++ b/batman-adv/patches/0005-batman-adv-Fix-duplicated-OGMs-on-NETDEV_UP.patch @@ -24,11 +24,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/c92331e0df3c0c5645ee5a897eb018c5da5e4aa5 -diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c -index bd4138ddf7e09a0020d9842d603dc98f21e225c7..240ed70912d6a014c0a48280741989133034396c 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c -@@ -2337,7 +2337,7 @@ batadv_iv_ogm_neigh_is_sob(struct batadv_neigh_node *neigh1, +@@ -2337,7 +2337,7 @@ batadv_iv_ogm_neigh_is_sob(struct batadv return ret; } @@ -37,7 +35,7 @@ index bd4138ddf7e09a0020d9842d603dc98f21e225c7..240ed70912d6a014c0a4828074198913 { /* begin scheduling originator messages on that interface */ batadv_iv_ogm_schedule(hard_iface); -@@ -2683,8 +2683,8 @@ static void batadv_iv_gw_dump(struct sk_buff *msg, struct netlink_callback *cb, +@@ -2683,8 +2683,8 @@ unlock: static struct batadv_algo_ops batadv_batman_iv __read_mostly = { .name = "BATMAN_IV", .iface = { @@ -47,11 +45,9 @@ index bd4138ddf7e09a0020d9842d603dc98f21e225c7..240ed70912d6a014c0a4828074198913 .disable = batadv_iv_ogm_iface_disable, .update_mac = batadv_iv_ogm_iface_update_mac, .primary_set = batadv_iv_ogm_primary_iface_set, -diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c -index 79d1731b83066c60f9aef958d2bc343233bce67a..3719cfd026f04093f5d86ffe1b41a41849b2af62 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c -@@ -795,6 +795,9 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, +@@ -795,6 +795,9 @@ int batadv_hardif_enable_interface(struc batadv_hardif_recalc_extra_skbroom(soft_iface); @@ -61,8 +57,6 @@ index 79d1731b83066c60f9aef958d2bc343233bce67a..3719cfd026f04093f5d86ffe1b41a418 out: return 0; -diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index 74b644738a36bfe063eef6df016278b45a1a0256..e0b25104cbfa9f715df364658621c29faa7ad637 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h @@ -2129,6 +2129,9 @@ struct batadv_algo_iface_ops { diff --git a/batman-adv/patches/0006-batman-adv-Fix-netlink-dumping-of-all-mcast_flags-bu.patch b/batman-adv/patches/0006-batman-adv-Fix-netlink-dumping-of-all-mcast_flags-bu.patch index afc9db1..78a4bb3 100644 --- a/batman-adv/patches/0006-batman-adv-Fix-netlink-dumping-of-all-mcast_flags-bu.patch +++ b/batman-adv/patches/0006-batman-adv-Fix-netlink-dumping-of-all-mcast_flags-bu.patch @@ -14,11 +14,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/d1de7f7aa316d6f7b3268f61afa88f5d2c1a5db5 -diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c -index ec54e236e345432496df8f55b2e00fbad92f3444..50fe9dfb088b60a911756c8c22cac1db6ef10ca4 100644 --- a/net/batman-adv/multicast.c +++ b/net/batman-adv/multicast.c -@@ -1653,7 +1653,7 @@ __batadv_mcast_flags_dump(struct sk_buff *msg, u32 portid, +@@ -1653,7 +1653,7 @@ __batadv_mcast_flags_dump(struct sk_buff while (bucket_tmp < hash->size) { if (batadv_mcast_flags_dump_bucket(msg, portid, cb, hash, diff --git a/batman-adv/patches/0007-batman-adv-fix-uninit-value-in-batadv_netlink_get_if.patch b/batman-adv/patches/0007-batman-adv-fix-uninit-value-in-batadv_netlink_get_if.patch index 0a79f4b..f81cf61 100644 --- a/batman-adv/patches/0007-batman-adv-fix-uninit-value-in-batadv_netlink_get_if.patch +++ b/batman-adv/patches/0007-batman-adv-fix-uninit-value-in-batadv_netlink_get_if.patch @@ -43,11 +43,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/9b470b8a2b9ef4ce68d6e95febd3a0574be1ac14 -diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c -index daf56933223d478399c63360203bcf283d7686a3..e1978bc52a700e77ff881136c05ccb934f3b851d 100644 --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c -@@ -164,7 +164,7 @@ batadv_netlink_get_ifindex(const struct nlmsghdr *nlh, int attrtype) +@@ -164,7 +164,7 @@ batadv_netlink_get_ifindex(const struct { struct nlattr *attr = nlmsg_find_attr(nlh, GENL_HDRLEN, attrtype); diff --git a/batman-adv/patches/0008-batman-adv-Only-read-OGM-tvlv_len-after-buffer-len-c.patch b/batman-adv/patches/0008-batman-adv-Only-read-OGM-tvlv_len-after-buffer-len-c.patch index f33fdc3..e5b1383 100644 --- a/batman-adv/patches/0008-batman-adv-Only-read-OGM-tvlv_len-after-buffer-len-c.patch +++ b/batman-adv/patches/0008-batman-adv-Only-read-OGM-tvlv_len-after-buffer-len-c.patch @@ -21,11 +21,9 @@ Acked-by: Antonio Quartulli Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/07b6051ebcfaa7ea89b4f278eca2ff4070d29e56 -diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c -index 240ed70912d6a014c0a48280741989133034396c..d78938e3e0085d9cff138b805148a0e77de3f654 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c -@@ -277,17 +277,23 @@ static u8 batadv_hop_penalty(u8 tq, const struct batadv_priv *bat_priv) +@@ -277,17 +277,23 @@ static u8 batadv_hop_penalty(u8 tq, cons * batadv_iv_ogm_aggr_packet() - checks if there is another OGM attached * @buff_pos: current position in the skb * @packet_len: total length of the skb @@ -54,7 +52,7 @@ index 240ed70912d6a014c0a48280741989133034396c..d78938e3e0085d9cff138b805148a0e7 return (next_buff_pos <= packet_len) && (next_buff_pos <= BATADV_MAX_AGGREGATION_BYTES); -@@ -315,7 +321,7 @@ static void batadv_iv_ogm_send_to_if(struct batadv_forw_packet *forw_packet, +@@ -315,7 +321,7 @@ static void batadv_iv_ogm_send_to_if(str /* adjust all flags and log packets */ while (batadv_iv_ogm_aggr_packet(buff_pos, forw_packet->packet_len, @@ -63,7 +61,7 @@ index 240ed70912d6a014c0a48280741989133034396c..d78938e3e0085d9cff138b805148a0e7 /* we might have aggregated direct link packets with an * ordinary base packet */ -@@ -1704,7 +1710,7 @@ static int batadv_iv_ogm_receive(struct sk_buff *skb, +@@ -1704,7 +1710,7 @@ static int batadv_iv_ogm_receive(struct /* unpack the aggregated packets and process them one by one */ while (batadv_iv_ogm_aggr_packet(ogm_offset, skb_headlen(skb), diff --git a/batman-adv/patches/0009-batman-adv-Only-read-OGM2-tvlv_len-after-buffer-len-.patch b/batman-adv/patches/0009-batman-adv-Only-read-OGM2-tvlv_len-after-buffer-len-.patch index e53ea2f..2921994 100644 --- a/batman-adv/patches/0009-batman-adv-Only-read-OGM2-tvlv_len-after-buffer-len-.patch +++ b/batman-adv/patches/0009-batman-adv-Only-read-OGM2-tvlv_len-after-buffer-len-.patch @@ -18,11 +18,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/18f77da3761c5550f42a2d131f0fe5cac62e022d -diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c -index fad95ef64e01a9670ed66f9a81658718a14fc716..bc06e3cdfa84f63cc003867d4453a88249d3fb18 100644 --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c -@@ -631,17 +631,23 @@ batadv_v_ogm_process_per_outif(struct batadv_priv *bat_priv, +@@ -631,17 +631,23 @@ batadv_v_ogm_process_per_outif(struct ba * batadv_v_ogm_aggr_packet() - checks if there is another OGM aggregated * @buff_pos: current position in the skb * @packet_len: total length of the skb @@ -51,7 +49,7 @@ index fad95ef64e01a9670ed66f9a81658718a14fc716..bc06e3cdfa84f63cc003867d4453a882 return (next_buff_pos <= packet_len) && (next_buff_pos <= BATADV_MAX_AGGREGATION_BYTES); -@@ -818,7 +824,7 @@ int batadv_v_ogm_packet_recv(struct sk_buff *skb, +@@ -818,7 +824,7 @@ int batadv_v_ogm_packet_recv(struct sk_b ogm_packet = (struct batadv_ogm2_packet *)skb->data; while (batadv_v_ogm_aggr_packet(ogm_offset, skb_headlen(skb), diff --git a/batman-adv/patches/0010-batman-adv-Avoid-free-alloc-race-when-handling-OGM2-.patch b/batman-adv/patches/0010-batman-adv-Avoid-free-alloc-race-when-handling-OGM2-.patch index dd20d53..420a4e6 100644 --- a/batman-adv/patches/0010-batman-adv-Avoid-free-alloc-race-when-handling-OGM2-.patch +++ b/batman-adv/patches/0010-batman-adv-Avoid-free-alloc-race-when-handling-OGM2-.patch @@ -19,8 +19,6 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/14ee24576213ff02272b7f8d975c7c61d5448aa2 -diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c -index bc06e3cdfa84f63cc003867d4453a88249d3fb18..034bdc5e31e7b1b6f12c06da9977b3b6663da7f3 100644 --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c @@ -21,6 +21,7 @@ @@ -31,7 +29,7 @@ index bc06e3cdfa84f63cc003867d4453a88249d3fb18..034bdc5e31e7b1b6f12c06da9977b3b6 #include #include #include -@@ -116,14 +117,12 @@ static void batadv_v_ogm_send_to_if(struct sk_buff *skb, +@@ -116,14 +117,12 @@ static void batadv_v_ogm_send_to_if(stru } /** @@ -49,7 +47,7 @@ index bc06e3cdfa84f63cc003867d4453a88249d3fb18..034bdc5e31e7b1b6f12c06da9977b3b6 struct batadv_ogm2_packet *ogm_packet; struct sk_buff *skb, *skb_tmp; unsigned char *ogm_buff; -@@ -131,8 +130,7 @@ static void batadv_v_ogm_send(struct work_struct *work) +@@ -131,8 +130,7 @@ static void batadv_v_ogm_send(struct wor u16 tvlv_len = 0; int ret; @@ -59,11 +57,10 @@ index bc06e3cdfa84f63cc003867d4453a88249d3fb18..034bdc5e31e7b1b6f12c06da9977b3b6 if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) goto out; -@@ -223,6 +221,22 @@ static void batadv_v_ogm_send(struct work_struct *work) - return; +@@ -224,6 +222,22 @@ out: } -+/** + /** + * batadv_v_ogm_send() - periodic worker broadcasting the own OGM + * @work: work queue item + */ @@ -79,10 +76,11 @@ index bc06e3cdfa84f63cc003867d4453a88249d3fb18..034bdc5e31e7b1b6f12c06da9977b3b6 + rtnl_unlock(); +} + - /** ++/** * batadv_v_ogm_iface_enable() - prepare an interface for B.A.T.M.A.N. V * @hard_iface: the interface to prepare -@@ -249,6 +263,8 @@ void batadv_v_ogm_primary_iface_set(struct batadv_hard_iface *primary_iface) + * +@@ -249,6 +263,8 @@ void batadv_v_ogm_primary_iface_set(stru struct batadv_priv *bat_priv = netdev_priv(primary_iface->soft_iface); struct batadv_ogm2_packet *ogm_packet; @@ -91,7 +89,7 @@ index bc06e3cdfa84f63cc003867d4453a88249d3fb18..034bdc5e31e7b1b6f12c06da9977b3b6 if (!bat_priv->bat_v.ogm_buff) return; -@@ -857,6 +873,8 @@ int batadv_v_ogm_init(struct batadv_priv *bat_priv) +@@ -857,6 +873,8 @@ int batadv_v_ogm_init(struct batadv_priv unsigned char *ogm_buff; u32 random_seqno; @@ -100,8 +98,6 @@ index bc06e3cdfa84f63cc003867d4453a88249d3fb18..034bdc5e31e7b1b6f12c06da9977b3b6 bat_priv->bat_v.ogm_buff_len = BATADV_OGM2_HLEN; ogm_buff = kzalloc(bat_priv->bat_v.ogm_buff_len, GFP_ATOMIC); if (!ogm_buff) -diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index e0b25104cbfa9f715df364658621c29faa7ad637..f298e9a04986faf40db04ece14180b7f43b5a7b7 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h @@ -1477,10 +1477,10 @@ struct batadv_softif_vlan { diff --git a/batman-adv/patches/0010-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch b/batman-adv/patches/0011-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch similarity index 81% rename from batman-adv/patches/0010-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch rename to batman-adv/patches/0011-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch index 4288c4f..a612310 100644 --- a/batman-adv/patches/0010-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch +++ b/batman-adv/patches/0011-batman-adv-initialize-struct-batadv_tvlv_tt_vlan_dat.patch @@ -19,11 +19,9 @@ Fixes: 21a57f6e7a3b ("batman-adv: make the TT CRC logic VLAN specific") Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/fe8bf38f47a0c1a0e53c487228e3f5a44c86939f -diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c -index 8a482c5ec67bb22167bca02b4181252045e3b605..c5271ea4dc8321fadc75fca7790b1382102dbb5a 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c -@@ -891,6 +891,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node, +@@ -891,6 +891,7 @@ batadv_tt_prepare_tvlv_global_data(struc hlist_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) { tt_vlan->vid = htons(vlan->vid); tt_vlan->crc = htonl(vlan->tt.crc); @@ -31,7 +29,7 @@ index 8a482c5ec67bb22167bca02b4181252045e3b605..c5271ea4dc8321fadc75fca7790b1382 tt_vlan++; } -@@ -974,6 +975,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv, +@@ -974,6 +975,7 @@ batadv_tt_prepare_tvlv_local_data(struct tt_vlan->vid = htons(vlan->vid); tt_vlan->crc = htonl(vlan->tt.crc); diff --git a/batman-adv/patches/0011-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch b/batman-adv/patches/0012-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch similarity index 80% rename from batman-adv/patches/0011-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch rename to batman-adv/patches/0012-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch index b0718d1..ffcefde 100644 --- a/batman-adv/patches/0011-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch +++ b/batman-adv/patches/0012-batman-adv-Avoid-free-alloc-race-when-handling-OGM-b.patch @@ -20,8 +20,6 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/9b8ceef26c697d0c8319748428944c3339a498dc -diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c -index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f05010869c5ebe66 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c @@ -29,6 +29,7 @@ @@ -32,7 +30,7 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 #include #include #include -@@ -193,6 +194,8 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface) +@@ -193,6 +194,8 @@ static int batadv_iv_ogm_iface_enable(st unsigned char *ogm_buff; u32 random_seqno; @@ -41,7 +39,7 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 /* randomize initial seqno to avoid collision */ get_random_bytes(&random_seqno, sizeof(random_seqno)); atomic_set(&hard_iface->bat_iv.ogm_seqno, random_seqno); -@@ -217,6 +220,8 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface) +@@ -217,6 +220,8 @@ static int batadv_iv_ogm_iface_enable(st static void batadv_iv_ogm_iface_disable(struct batadv_hard_iface *hard_iface) { @@ -50,7 +48,7 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 kfree(hard_iface->bat_iv.ogm_buff); hard_iface->bat_iv.ogm_buff = NULL; } -@@ -226,6 +231,8 @@ static void batadv_iv_ogm_iface_update_mac(struct batadv_hard_iface *hard_iface) +@@ -226,6 +231,8 @@ static void batadv_iv_ogm_iface_update_m struct batadv_ogm_packet *batadv_ogm_packet; unsigned char *ogm_buff = hard_iface->bat_iv.ogm_buff; @@ -59,7 +57,7 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 batadv_ogm_packet = (struct batadv_ogm_packet *)ogm_buff; ether_addr_copy(batadv_ogm_packet->orig, hard_iface->net_dev->dev_addr); -@@ -239,6 +246,8 @@ batadv_iv_ogm_primary_iface_set(struct batadv_hard_iface *hard_iface) +@@ -239,6 +246,8 @@ batadv_iv_ogm_primary_iface_set(struct b struct batadv_ogm_packet *batadv_ogm_packet; unsigned char *ogm_buff = hard_iface->bat_iv.ogm_buff; @@ -68,7 +66,7 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 batadv_ogm_packet = (struct batadv_ogm_packet *)ogm_buff; batadv_ogm_packet->ttl = BATADV_TTL; } -@@ -753,6 +762,8 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface) +@@ -753,6 +762,8 @@ static void batadv_iv_ogm_schedule(struc u16 tvlv_len = 0; unsigned long send_time; @@ -77,7 +75,7 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 if (hard_iface->if_status == BATADV_IF_NOT_IN_USE || hard_iface->if_status == BATADV_IF_TO_BE_REMOVED) return; -@@ -1643,16 +1654,12 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset, +@@ -1643,16 +1654,12 @@ static void batadv_iv_ogm_process(const batadv_orig_node_put(orig_node); } @@ -96,7 +94,7 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 bat_priv = netdev_priv(forw_packet->if_incoming->soft_iface); if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) { -@@ -1681,6 +1688,20 @@ static void batadv_iv_send_outstanding_bat_ogm_packet(struct work_struct *work) +@@ -1681,6 +1688,20 @@ out: batadv_forw_packet_free(forw_packet, dropped); } @@ -117,8 +115,6 @@ index d78938e3e0085d9cff138b805148a0e77de3f654..e20c3813182c422a52f58178f0501086 static int batadv_iv_ogm_receive(struct sk_buff *skb, struct batadv_hard_iface *if_incoming) { -diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index f298e9a04986faf40db04ece14180b7f43b5a7b7..f3084b005ed641d8ab8910df542762bc7dff450a 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h @@ -71,10 +71,10 @@ enum batadv_dhcp_recipient { diff --git a/batman-adv/patches/0012-batman-adv-Introduce-own-OGM2-buffer-mutex.patch b/batman-adv/patches/0013-batman-adv-Introduce-own-OGM2-buffer-mutex.patch similarity index 82% rename from batman-adv/patches/0012-batman-adv-Introduce-own-OGM2-buffer-mutex.patch rename to batman-adv/patches/0013-batman-adv-Introduce-own-OGM2-buffer-mutex.patch index 49d8e25..c938507 100644 --- a/batman-adv/patches/0012-batman-adv-Introduce-own-OGM2-buffer-mutex.patch +++ b/batman-adv/patches/0013-batman-adv-Introduce-own-OGM2-buffer-mutex.patch @@ -12,8 +12,6 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/8069c581f9097f1f9398f2d49047a1dab8093821 -diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c -index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371cd3e9655 100644 --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c @@ -17,11 +17,12 @@ @@ -30,7 +28,7 @@ index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371 #include #include #include -@@ -130,7 +131,7 @@ static void batadv_v_ogm_send_softif(struct batadv_priv *bat_priv) +@@ -130,7 +131,7 @@ static void batadv_v_ogm_send_softif(str u16 tvlv_len = 0; int ret; @@ -39,7 +37,7 @@ index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371 if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) goto out; -@@ -230,11 +231,12 @@ static void batadv_v_ogm_send(struct work_struct *work) +@@ -230,11 +231,12 @@ static void batadv_v_ogm_send(struct wor struct batadv_priv_bat_v *bat_v; struct batadv_priv *bat_priv; @@ -54,7 +52,7 @@ index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371 } /** -@@ -263,13 +265,15 @@ void batadv_v_ogm_primary_iface_set(struct batadv_hard_iface *primary_iface) +@@ -263,13 +265,15 @@ void batadv_v_ogm_primary_iface_set(stru struct batadv_priv *bat_priv = netdev_priv(primary_iface->soft_iface); struct batadv_ogm2_packet *ogm_packet; @@ -73,7 +71,7 @@ index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371 } /** -@@ -873,8 +877,6 @@ int batadv_v_ogm_init(struct batadv_priv *bat_priv) +@@ -873,8 +877,6 @@ int batadv_v_ogm_init(struct batadv_priv unsigned char *ogm_buff; u32 random_seqno; @@ -82,7 +80,7 @@ index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371 bat_priv->bat_v.ogm_buff_len = BATADV_OGM2_HLEN; ogm_buff = kzalloc(bat_priv->bat_v.ogm_buff_len, GFP_ATOMIC); if (!ogm_buff) -@@ -893,6 +895,8 @@ int batadv_v_ogm_init(struct batadv_priv *bat_priv) +@@ -893,6 +895,8 @@ int batadv_v_ogm_init(struct batadv_priv atomic_set(&bat_priv->bat_v.ogm_seqno, random_seqno); INIT_DELAYED_WORK(&bat_priv->bat_v.ogm_wq, batadv_v_ogm_send); @@ -91,7 +89,7 @@ index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371 return 0; } -@@ -904,7 +908,11 @@ void batadv_v_ogm_free(struct batadv_priv *bat_priv) +@@ -904,7 +908,11 @@ void batadv_v_ogm_free(struct batadv_pri { cancel_delayed_work_sync(&bat_priv->bat_v.ogm_wq); @@ -103,8 +101,6 @@ index 034bdc5e31e7b1b6f12c06da9977b3b6663da7f3..74452e9385b1a6e81be64af259dfc371 + + mutex_unlock(&bat_priv->bat_v.ogm_buff_mutex); } -diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index f3084b005ed641d8ab8910df542762bc7dff450a..09f44bac693fcb3dc13c33319f4928a472a14b2e 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h @@ -16,6 +16,7 @@ diff --git a/batman-adv/patches/0013-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch b/batman-adv/patches/0014-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch similarity index 85% rename from batman-adv/patches/0013-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch rename to batman-adv/patches/0014-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch index bd187c7..0216ca8 100644 --- a/batman-adv/patches/0013-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch +++ b/batman-adv/patches/0014-batman-adv-Avoid-OGM-workqueue-synchronous-cancel-de.patch @@ -24,8 +24,6 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/d3be478f1aa27b47f61c4a62e18eb063d47c9168 -diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c -index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5acef6d66f 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c @@ -22,6 +22,8 @@ @@ -45,7 +43,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a #include #include #include -@@ -194,7 +195,7 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface) +@@ -194,7 +195,7 @@ static int batadv_iv_ogm_iface_enable(st unsigned char *ogm_buff; u32 random_seqno; @@ -54,7 +52,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a /* randomize initial seqno to avoid collision */ get_random_bytes(&random_seqno, sizeof(random_seqno)); -@@ -202,8 +203,10 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface) +@@ -202,8 +203,10 @@ static int batadv_iv_ogm_iface_enable(st hard_iface->bat_iv.ogm_buff_len = BATADV_OGM_HLEN; ogm_buff = kmalloc(hard_iface->bat_iv.ogm_buff_len, GFP_ATOMIC); @@ -66,7 +64,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a hard_iface->bat_iv.ogm_buff = ogm_buff; -@@ -215,41 +218,59 @@ static int batadv_iv_ogm_iface_enable(struct batadv_hard_iface *hard_iface) +@@ -215,41 +218,59 @@ static int batadv_iv_ogm_iface_enable(st batadv_ogm_packet->reserved = 0; batadv_ogm_packet->tq = BATADV_TQ_MAX_VALUE; @@ -133,7 +131,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a } /* when do we schedule our own ogm to be sent */ -@@ -751,7 +772,11 @@ batadv_iv_ogm_slide_own_bcast_window(struct batadv_hard_iface *hard_iface) +@@ -751,7 +772,11 @@ batadv_iv_ogm_slide_own_bcast_window(str } } @@ -146,7 +144,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a { struct batadv_priv *bat_priv = netdev_priv(hard_iface->soft_iface); unsigned char **ogm_buff = &hard_iface->bat_iv.ogm_buff; -@@ -762,11 +787,7 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface) +@@ -762,11 +787,7 @@ static void batadv_iv_ogm_schedule(struc u16 tvlv_len = 0; unsigned long send_time; @@ -159,7 +157,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a /* the interface gets activated here to avoid race conditions between * the moment of activating the interface in -@@ -834,6 +855,17 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface) +@@ -834,6 +855,17 @@ out: batadv_hardif_put(primary_if); } @@ -177,7 +175,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a /** * batadv_iv_orig_ifinfo_sum() - Get bcast_own sum for originator over iterface * @orig_node: originator which reproadcasted the OGMs directly -@@ -1654,12 +1686,16 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset, +@@ -1654,12 +1686,16 @@ static void batadv_iv_ogm_process(const batadv_orig_node_put(orig_node); } @@ -196,7 +194,7 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a bat_priv = netdev_priv(forw_packet->if_incoming->soft_iface); if (atomic_read(&bat_priv->mesh_state) == BATADV_MESH_DEACTIVATING) { -@@ -1688,20 +1724,6 @@ batadv_iv_send_outstanding_forw_packet(struct batadv_forw_packet *forw_packet) +@@ -1688,20 +1724,6 @@ out: batadv_forw_packet_free(forw_packet, dropped); } @@ -217,8 +215,6 @@ index e20c3813182c422a52f58178f05010869c5ebe66..5b0b20e6da956b4333b118bce1c09c5a static int batadv_iv_ogm_receive(struct sk_buff *skb, struct batadv_hard_iface *if_incoming) { -diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c -index 3719cfd026f04093f5d86ffe1b41a41849b2af62..62b926dd4aaeffd82da83654c8e568de2c3714fb 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c @@ -17,6 +17,7 @@ @@ -229,7 +225,7 @@ index 3719cfd026f04093f5d86ffe1b41a41849b2af62..62b926dd4aaeffd82da83654c8e568de #include #include #include -@@ -930,6 +931,7 @@ batadv_hardif_add_interface(struct net_device *net_dev) +@@ -930,6 +931,7 @@ batadv_hardif_add_interface(struct net_d INIT_LIST_HEAD(&hard_iface->list); INIT_HLIST_HEAD(&hard_iface->neigh_list); @@ -237,8 +233,6 @@ index 3719cfd026f04093f5d86ffe1b41a41849b2af62..62b926dd4aaeffd82da83654c8e568de spin_lock_init(&hard_iface->neigh_list_lock); kref_init(&hard_iface->refcount); -diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h -index 09f44bac693fcb3dc13c33319f4928a472a14b2e..c0ded822517b94333451deb9c0ff4037744b1fd9 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h @@ -72,14 +72,17 @@ enum batadv_dhcp_recipient { diff --git a/batman-adv/patches/0014-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch b/batman-adv/patches/0015-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch similarity index 81% rename from batman-adv/patches/0014-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch rename to batman-adv/patches/0015-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch index fc9f5d9..23a7ae4 100644 --- a/batman-adv/patches/0014-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch +++ b/batman-adv/patches/0015-batman-adv-Fix-DAT-candidate-selection-on-little-end.patch @@ -19,11 +19,9 @@ Acked-by: Antonio Quartulli Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/728aea06f38e0e4d70f4f7d43698187f7f7055c5 -diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c -index b0af3a11d4069cb7e44419d4494f20dd653dbca8..ec7bf5a4a9fc724b63da7bfd7ece79f32b104d99 100644 --- a/net/batman-adv/distributed-arp-table.c +++ b/net/batman-adv/distributed-arp-table.c -@@ -285,6 +285,7 @@ static u32 batadv_hash_dat(const void *data, u32 size) +@@ -285,6 +285,7 @@ static u32 batadv_hash_dat(const void *d u32 hash = 0; const struct batadv_dat_entry *dat = data; const unsigned char *key; @@ -31,7 +29,7 @@ index b0af3a11d4069cb7e44419d4494f20dd653dbca8..ec7bf5a4a9fc724b63da7bfd7ece79f3 u32 i; key = (const unsigned char *)&dat->ip; -@@ -294,7 +295,8 @@ static u32 batadv_hash_dat(const void *data, u32 size) +@@ -294,7 +295,8 @@ static u32 batadv_hash_dat(const void *d hash ^= (hash >> 6); } diff --git a/batman-adv/patches/0015-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch b/batman-adv/patches/0016-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch similarity index 84% rename from batman-adv/patches/0015-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch rename to batman-adv/patches/0016-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch index bf42a69..99a2e02 100644 --- a/batman-adv/patches/0015-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch +++ b/batman-adv/patches/0016-batman-adv-Don-t-schedule-OGM-for-disabled-interface.patch @@ -20,11 +20,9 @@ Signed-off-by: Simon Wunderlich Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/a089c55ca004b396d340baae58abe9a79f32cc0f -diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c -index 5b0b20e6da956b4333b118bce1c09c5acef6d66f..d88a4de0223727d25cf36839e46d7777449f025a 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c -@@ -789,6 +789,10 @@ static void batadv_iv_ogm_schedule_buff(struct batadv_hard_iface *hard_iface) +@@ -789,6 +789,10 @@ static void batadv_iv_ogm_schedule_buff( lockdep_assert_held(&hard_iface->bat_iv.ogm_buff_mutex); diff --git a/batman-adv/patches/0016-batman-adv-fix-batadv_nc_random_weight_tq.patch b/batman-adv/patches/0017-batman-adv-fix-batadv_nc_random_weight_tq.patch similarity index 88% rename from batman-adv/patches/0016-batman-adv-fix-batadv_nc_random_weight_tq.patch rename to batman-adv/patches/0017-batman-adv-fix-batadv_nc_random_weight_tq.patch index 6a92197..1694f57 100644 --- a/batman-adv/patches/0016-batman-adv-fix-batadv_nc_random_weight_tq.patch +++ b/batman-adv/patches/0017-batman-adv-fix-batadv_nc_random_weight_tq.patch @@ -36,11 +36,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/db48c60b0edb995450ee846157364bd09bb23762 -diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c -index c5e7906045f3c62c052400c44a18bca0a38499ba..b7f3d9ef83cfcc136888cd2487dcdd88cb16d6d9 100644 --- a/net/batman-adv/network-coding.c +++ b/net/batman-adv/network-coding.c -@@ -1009,15 +1009,8 @@ static struct batadv_nc_path *batadv_nc_get_path(struct batadv_priv *bat_priv, +@@ -1009,15 +1009,8 @@ static struct batadv_nc_path *batadv_nc_ */ static u8 batadv_nc_random_weight_tq(u8 tq) { diff --git a/batman-adv/patches/0017-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch b/batman-adv/patches/0018-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch similarity index 85% rename from batman-adv/patches/0017-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch rename to batman-adv/patches/0018-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch index 9ae0050..725e4cf 100644 --- a/batman-adv/patches/0017-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch +++ b/batman-adv/patches/0018-batman-adv-Fix-refcnt-leak-in-batadv_show_throughput.patch @@ -24,11 +24,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/f301bfed59b146a63471d0f147b767d7cafede6f -diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c -index 80fc3253c3368e3cc356176c5ba961542de0a8c9..c20f2bab9db56021f7280ebdfc2afcfd772991bd 100644 --- a/net/batman-adv/sysfs.c +++ b/net/batman-adv/sysfs.c -@@ -1189,6 +1189,7 @@ static ssize_t batadv_show_throughput_override(struct kobject *kobj, +@@ -1189,6 +1189,7 @@ static ssize_t batadv_show_throughput_ov tp_override = atomic_read(&hard_iface->bat_v.throughput_override); diff --git a/batman-adv/patches/0018-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch b/batman-adv/patches/0019-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch similarity index 85% rename from batman-adv/patches/0018-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch rename to batman-adv/patches/0019-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch index 45f07db..69ed250 100644 --- a/batman-adv/patches/0018-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch +++ b/batman-adv/patches/0019-batman-adv-Fix-refcnt-leak-in-batadv_store_throughpu.patch @@ -24,11 +24,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/b69cd8bdbfd6fa7e61878c2fa9e6637406f40dd9 -diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c -index c20f2bab9db56021f7280ebdfc2afcfd772991bd..34e9948fbd45ef6f2690052a208d6a4e4a4f215b 100644 --- a/net/batman-adv/sysfs.c +++ b/net/batman-adv/sysfs.c -@@ -1149,7 +1149,7 @@ static ssize_t batadv_store_throughput_override(struct kobject *kobj, +@@ -1149,7 +1149,7 @@ static ssize_t batadv_store_throughput_o ret = batadv_parse_throughput(net_dev, buff, "throughput_override", &tp_override); if (!ret) diff --git a/batman-adv/patches/0019-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch b/batman-adv/patches/0020-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch similarity index 84% rename from batman-adv/patches/0019-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch rename to batman-adv/patches/0020-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch index 9f9db7d..5c59f2f 100644 --- a/batman-adv/patches/0019-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch +++ b/batman-adv/patches/0020-batman-adv-Fix-refcnt-leak-in-batadv_v_ogm_process.patch @@ -24,11 +24,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/4515f5e6a4ccbe1c563b05f2d487eb9eef3c9740 -diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c -index 74452e9385b1a6e81be64af259dfc371cd3e9655..9c42152829c976a2fb6c4395ab4d17c34fe47682 100644 --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c -@@ -723,7 +723,7 @@ static void batadv_v_ogm_process(const struct sk_buff *skb, int ogm_offset, +@@ -723,7 +723,7 @@ static void batadv_v_ogm_process(const s orig_node = batadv_v_ogm_orig_get(bat_priv, ogm_packet->orig); if (!orig_node) diff --git a/batman-adv/patches/0020-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch b/batman-adv/patches/0021-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch similarity index 84% rename from batman-adv/patches/0020-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch rename to batman-adv/patches/0021-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch index 0de7d25..adc6ba9 100644 --- a/batman-adv/patches/0020-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch +++ b/batman-adv/patches/0021-batman-adv-Revert-disable-ethtool-link-speed-detecti.patch @@ -28,8 +28,6 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/6e860b3d5e4147bafcda32bf9b3e769926f232c5 -diff --git a/compat-include/linux/ethtool.h b/compat-include/linux/ethtool.h -index e1f39c3377febbd650a75206aafa9ae3e807762a..8dcbe02c3decf941e892af70a0a67653b010e65e 100644 --- a/compat-include/linux/ethtool.h +++ b/compat-include/linux/ethtool.h @@ -21,7 +21,6 @@ struct batadv_ethtool_link_ksettings { @@ -40,7 +38,7 @@ index e1f39c3377febbd650a75206aafa9ae3e807762a..8dcbe02c3decf941e892af70a0a67653 } base; }; -@@ -42,7 +41,6 @@ batadv_ethtool_get_link_ksettings(struct net_device *dev, +@@ -42,7 +41,6 @@ batadv_ethtool_get_link_ksettings(struct return ret; link_ksettings->base.duplex = cmd.duplex; @@ -48,11 +46,9 @@ index e1f39c3377febbd650a75206aafa9ae3e807762a..8dcbe02c3decf941e892af70a0a67653 link_ksettings->base.speed = ethtool_cmd_speed(&cmd); return 0; -diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c -index 2614a9caee008539cc489b71dabdc36ac0ae3752..a39af0eefad313101812118181ec0376b21b79bb 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c -@@ -120,20 +120,7 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh) +@@ -120,20 +120,7 @@ static u32 batadv_v_elp_get_throughput(s rtnl_lock(); ret = __ethtool_get_link_ksettings(hard_iface->net_dev, &link_settings); rtnl_unlock(); diff --git a/batman-adv/patches/0021-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch b/batman-adv/patches/0022-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch similarity index 86% rename from batman-adv/patches/0021-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch rename to batman-adv/patches/0022-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch index 1b36259..9d14c6d 100644 --- a/batman-adv/patches/0021-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch +++ b/batman-adv/patches/0022-batman-adv-Avoid-uninitialized-chaddr-when-handling-.patch @@ -23,11 +23,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/fcdf008ffd749246632d1f9423163af5dc3f8c7f -diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c -index 47df4c678988613f7410acb96889558eabdf396d..89c9097007c3a575836018df9e0fe97731a19619 100644 --- a/net/batman-adv/gateway_client.c +++ b/net/batman-adv/gateway_client.c -@@ -703,8 +703,10 @@ batadv_gw_dhcp_recipient_get(struct sk_buff *skb, unsigned int *header_len, +@@ -703,8 +703,10 @@ batadv_gw_dhcp_recipient_get(struct sk_b chaddr_offset = *header_len + BATADV_DHCP_CHADDR_OFFSET; /* store the client address if the message is going to a client */ diff --git a/batman-adv/patches/0022-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch b/batman-adv/patches/0023-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch similarity index 86% rename from batman-adv/patches/0022-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch rename to batman-adv/patches/0023-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch index e1db268..6bda396 100644 --- a/batman-adv/patches/0022-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch +++ b/batman-adv/patches/0023-batman-adv-Fix-own-OGM-check-in-aggregated-OGMs.patch @@ -28,11 +28,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/d41cc7cb62c184b2fb8ab97fda45815918200001 -diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c -index 9c42152829c976a2fb6c4395ab4d17c34fe47682..330204a73a0d3d9e4083656b82ff7b9d73a48fdc 100644 --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c -@@ -704,6 +704,12 @@ static void batadv_v_ogm_process(const struct sk_buff *skb, int ogm_offset, +@@ -704,6 +704,12 @@ static void batadv_v_ogm_process(const s ntohl(ogm_packet->seqno), ogm_throughput, ogm_packet->ttl, ogm_packet->version, ntohs(ogm_packet->tvlv_len)); @@ -45,7 +43,7 @@ index 9c42152829c976a2fb6c4395ab4d17c34fe47682..330204a73a0d3d9e4083656b82ff7b9d /* If the throughput metric is 0, immediately drop the packet. No need * to create orig_node / neigh_node for an unusable route. */ -@@ -831,11 +837,6 @@ int batadv_v_ogm_packet_recv(struct sk_buff *skb, +@@ -831,11 +837,6 @@ int batadv_v_ogm_packet_recv(struct sk_b if (batadv_is_my_mac(bat_priv, ethhdr->h_source)) goto free_skb; diff --git a/batman-adv/patches/0023-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch b/batman-adv/patches/0024-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch similarity index 78% rename from batman-adv/patches/0023-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch rename to batman-adv/patches/0024-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch index 53baee8..4d5634f 100644 --- a/batman-adv/patches/0023-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch +++ b/batman-adv/patches/0024-batman-adv-bla-use-netif_rx_ni-when-not-in-interrupt.patch @@ -13,11 +13,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/3747f81a1380b65740fc52fc71c7a3af4c6e49de -diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c -index 663a53b6d36e65508b4296d86cecdd808c653836..5f6309ade1ea19f6a0bd27e8cbc5fcfba8f7dda5 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c -@@ -437,7 +437,10 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, u8 *mac, +@@ -437,7 +437,10 @@ static void batadv_bla_send_claim(struct batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES, skb->len + ETH_HLEN); diff --git a/batman-adv/patches/0024-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch b/batman-adv/patches/0025-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch similarity index 85% rename from batman-adv/patches/0024-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch rename to batman-adv/patches/0025-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch index 35d96e3..4799d6a 100644 --- a/batman-adv/patches/0024-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch +++ b/batman-adv/patches/0025-batman-adv-bla-fix-type-misuse-for-backbone_gw-hash-.patch @@ -19,11 +19,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/398a706cd46c1fc085aef56ae8ed11f76e182bd1 -diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c -index 5f6309ade1ea19f6a0bd27e8cbc5fcfba8f7dda5..62d2e766dd3929e54070c13225f0f71c7f59a212 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c -@@ -83,11 +83,12 @@ static inline u32 batadv_choose_claim(const void *data, u32 size) +@@ -83,11 +83,12 @@ static inline u32 batadv_choose_claim(co */ static inline u32 batadv_choose_backbone_gw(const void *data, u32 size) { diff --git a/batman-adv/patches/0025-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch b/batman-adv/patches/0026-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch similarity index 88% rename from batman-adv/patches/0025-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch rename to batman-adv/patches/0026-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch index 34e9557..2a9b1ae 100644 --- a/batman-adv/patches/0025-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch +++ b/batman-adv/patches/0026-batman-adv-mcast-TT-fix-wrongly-dropped-or-rerouted-.patch @@ -28,11 +28,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/22e740c5e6c9342e0f5028beb3d14b84a018d113 -diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c -index f0f864820dead3e7811a6b0d522ec84954d9aec2..708e90cb18a6e95409f50e41708d903dd8301f9c 100644 --- a/net/batman-adv/routing.c +++ b/net/batman-adv/routing.c -@@ -826,6 +826,10 @@ static bool batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, +@@ -826,6 +826,10 @@ static bool batadv_check_unicast_ttvn(st vid = batadv_get_vid(skb, hdr_len); ethhdr = (struct ethhdr *)(skb->data + hdr_len); diff --git a/batman-adv/patches/0026-batman-adv-Add-missing-include-for-in_interrupt.patch b/batman-adv/patches/0027-batman-adv-Add-missing-include-for-in_interrupt.patch similarity index 83% rename from batman-adv/patches/0026-batman-adv-Add-missing-include-for-in_interrupt.patch rename to batman-adv/patches/0027-batman-adv-Add-missing-include-for-in_interrupt.patch index 9c6850a..a9eead3 100644 --- a/batman-adv/patches/0026-batman-adv-Add-missing-include-for-in_interrupt.patch +++ b/batman-adv/patches/0027-batman-adv-Add-missing-include-for-in_interrupt.patch @@ -12,8 +12,6 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/6ea99cd9c82b2d1bc4a313fe9006bcf5d956380e -diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c -index 62d2e766dd3929e54070c13225f0f71c7f59a212..fe406c17b2c0aa24f49a7d5dee4264fbca56d72f 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c @@ -25,6 +25,7 @@ diff --git a/batman-adv/patches/0027-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch b/batman-adv/patches/0027-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch deleted file mode 100644 index 5d548f5..0000000 --- a/batman-adv/patches/0027-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch +++ /dev/null @@ -1,170 +0,0 @@ -From: Linus Lüssing -Date: Tue, 15 Sep 2020 09:54:08 +0200 -Subject: batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN - -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: 405cc1e5a81e ("batman-adv: Modified forwarding behaviour for multicast packets") -Signed-off-by: Linus Lüssing -Acked-by: Simon Wunderlich -Signed-off-by: Sven Eckelmann - -Origin: backport, https://git.open-mesh.org/batman-adv.git/commit/3c39a2455a5be02ecceeaf1a15976bddd611392e - -diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c -index 50fe9dfb088b60a911756c8c22cac1db6ef10ca4..6f3a39ca274304c5d2196c2366291cd43ff234d5 100644 ---- a/net/batman-adv/multicast.c -+++ b/net/batman-adv/multicast.c -@@ -50,6 +50,7 @@ - #include - #include - -+#include "bridge_loop_avoidance.h" - #include "hard-interface.h" - #include "hash.h" - #include "log.h" -@@ -1019,6 +1020,35 @@ batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, - return BATADV_FORW_ALL; - } - -+/** -+ * 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_forw_tt() - forwards a packet to multicast listeners - * @bat_priv: the bat priv with all the soft interface information -@@ -1056,8 +1086,8 @@ batadv_mcast_forw_tt(struct batadv_priv *bat_priv, struct sk_buff *skb, - break; - } - -- batadv_send_skb_unicast(bat_priv, newskb, BATADV_UNICAST, 0, -- orig_entry->orig_node, vid); -+ batadv_mcast_forw_send_orig(bat_priv, newskb, vid, -+ orig_entry->orig_node); - } - rcu_read_unlock(); - -@@ -1098,8 +1128,7 @@ batadv_mcast_forw_want_all_ipv4(struct batadv_priv *bat_priv, - break; - } - -- batadv_send_skb_unicast(bat_priv, newskb, BATADV_UNICAST, 0, -- orig_node, vid); -+ batadv_mcast_forw_send_orig(bat_priv, newskb, vid, orig_node); - } - rcu_read_unlock(); - return ret; -@@ -1136,8 +1165,7 @@ batadv_mcast_forw_want_all_ipv6(struct batadv_priv *bat_priv, - break; - } - -- batadv_send_skb_unicast(bat_priv, newskb, BATADV_UNICAST, 0, -- orig_node, vid); -+ batadv_mcast_forw_send_orig(bat_priv, newskb, vid, orig_node); - } - rcu_read_unlock(); - return ret; -diff --git a/net/batman-adv/multicast.h b/net/batman-adv/multicast.h -index 653b9b76fabe68ee7dbe038ef86b7e631848c18a..a97e7f54b9fe58e980ba46b32c1a645e218d1f31 100644 ---- a/net/batman-adv/multicast.h -+++ b/net/batman-adv/multicast.h -@@ -46,6 +46,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); -+ - int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, - unsigned short vid); - -@@ -71,6 +76,16 @@ batadv_mcast_forw_mode(struct batadv_priv *bat_priv, struct sk_buff *skb, - return BATADV_FORW_ALL; - } - -+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 int - batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, - unsigned short vid) -diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c -index a7677e1d000fbc6ab60466cf5fc4f1750014268e..164cc254ef6f621ef7b8fb666821d8997188664f 100644 ---- a/net/batman-adv/soft-interface.c -+++ b/net/batman-adv/soft-interface.c -@@ -363,9 +363,8 @@ static netdev_tx_t batadv_interface_tx(struct sk_buff *skb, - 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 (forw_mode == BATADV_FORW_SOME) { - ret = batadv_mcast_forw_send(bat_priv, skb, vid); - } else { diff --git a/batman-adv/patches/0028-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch b/batman-adv/patches/0028-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch index 8169b0f..bebcd02 100644 --- a/batman-adv/patches/0028-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch +++ b/batman-adv/patches/0028-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch @@ -1,156 +1,164 @@ From: Linus Lüssing -Date: Tue, 15 Sep 2020 09:54:09 +0200 -Subject: batman-adv: mcast: fix duplicate mcast packets in BLA backbone from mesh +Date: Tue, 15 Sep 2020 09:54:08 +0200 +Subject: batman-adv: mcast: fix duplicate mcast packets in BLA backbone from LAN Scenario: -* Multicast frame send from mesh to a BLA backbone (multiple nodes - with their bat0 bridged together, with BLA enabled) +* 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, - once from mesh->bat0 and once from each backbone_gw from LAN +* BLA backbone nodes receive the frame multiple times on bat0 -For unicast, a node will send only to the best backbone gateway -according to the TQ. However for multicast we currently cannot determine -if multiple destination nodes share the same backbone if they don't share -the same backbone with us. So we need to keep sending the unicasts to -all backbone gateways and let the backbone gateways decide which one -will forward the frame. We can use the CLAIM mechanism to make this -decision. +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. -One catch: The batman-adv gateway feature for DHCP packets potentially -sends multicast packets in the same batman-adv unicast header as the -multicast optimizations code. And we are not allowed to drop those even -if we did not claim the source address of the sender, as for such -packets there is only this one multicast-in-unicast packet. +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. -How can we distinguish the two cases? +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. -The gateway feature uses a batman-adv unicast 4 address header. While -the multicast-to-unicasts feature uses a simple, 3 address batman-adv -unicast header. So let's use this to distinguish. +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: e32470167379 ("batman-adv: check incoming packet type for bla") +Fixes: 405cc1e5a81e ("batman-adv: Modified forwarding behaviour for multicast packets") Signed-off-by: Linus Lüssing Acked-by: Simon Wunderlich Signed-off-by: Sven Eckelmann -Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/d7665cf8a824c41c61c6e2110ab63d37eb7a8ef7 +Origin: backport, https://git.open-mesh.org/batman-adv.git/commit/3c39a2455a5be02ecceeaf1a15976bddd611392e -diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c -index fe406c17b2c0aa24f49a7d5dee4264fbca56d72f..ffa44d7f7ee5d221e8f511a446eb079a3686844b 100644 ---- a/net/batman-adv/bridge_loop_avoidance.c -+++ b/net/batman-adv/bridge_loop_avoidance.c -@@ -1814,7 +1814,7 @@ batadv_bla_loopdetect_check(struct batadv_priv *bat_priv, struct sk_buff *skb, - * @bat_priv: the bat priv with all the soft interface information - * @skb: the frame to be checked - * @vid: the VLAN ID of the frame -- * @is_bcast: the packet came in a broadcast packet type. -+ * @packet_type: the batman packet type this frame came in - * - * batadv_bla_rx avoidance checks if: - * * we have to race for a claim -@@ -1826,7 +1826,7 @@ batadv_bla_loopdetect_check(struct batadv_priv *bat_priv, struct sk_buff *skb, - * further process the skb. - */ - bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, -- unsigned short vid, bool is_bcast) -+ unsigned short vid, int packet_type) - { - struct batadv_bla_backbone_gw *backbone_gw; - struct ethhdr *ethhdr; -@@ -1848,9 +1848,24 @@ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, - goto handled; +--- a/net/batman-adv/multicast.c ++++ b/net/batman-adv/multicast.c +@@ -50,6 +50,7 @@ + #include + #include - if (unlikely(atomic_read(&bat_priv->bla.num_requests))) -- /* don't allow broadcasts while requests are in flight */ -- if (is_multicast_ether_addr(ethhdr->h_dest) && is_bcast) -- goto handled; -+ /* don't allow multicast packets while requests are in flight */ -+ if (is_multicast_ether_addr(ethhdr->h_dest)) -+ /* Both broadcast flooding or multicast-via-unicasts -+ * delivery might send to multiple backbone gateways -+ * sharing the same LAN and therefore need to coordinate -+ * which backbone gateway forwards into the LAN, -+ * by claiming the payload source address. -+ * -+ * Broadcast flooding and multicast-via-unicasts -+ * delivery use the following two batman packet types. -+ * Note: explicitly exclude BATADV_UNICAST_4ADDR, -+ * as the DHCP gateway feature will send explicitly -+ * to only one BLA gateway, so the claiming process -+ * should be avoided there. -+ */ -+ if (packet_type == BATADV_BCAST || -+ packet_type == BATADV_UNICAST) -+ goto handled; - - ether_addr_copy(search_claim.addr, ethhdr->h_source); - search_claim.vid = vid; -@@ -1885,13 +1900,14 @@ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, - goto allow; - } - -- /* if it is a broadcast ... */ -- if (is_multicast_ether_addr(ethhdr->h_dest) && is_bcast) { -+ /* if it is a multicast ... */ -+ if (is_multicast_ether_addr(ethhdr->h_dest) && -+ (packet_type == BATADV_BCAST || packet_type == BATADV_UNICAST)) { - /* ... drop it. the responsible gateway is in charge. - * -- * We need to check is_bcast because with the gateway -+ * We need to check packet type because with the gateway - * feature, broadcasts (like DHCP requests) may be sent -- * using a unicast packet type. -+ * using a unicast 4 address packet type. See comment above. - */ - goto handled; - } else { -diff --git a/net/batman-adv/bridge_loop_avoidance.h b/net/batman-adv/bridge_loop_avoidance.h -index 012d72c8d06463d64ed2374b0a9963577a5c25ab..f174ec2525d444f544385ce9f11604544573e67f 100644 ---- a/net/batman-adv/bridge_loop_avoidance.h -+++ b/net/batman-adv/bridge_loop_avoidance.h -@@ -36,7 +36,7 @@ static inline bool batadv_bla_is_loopdetect_mac(const uint8_t *mac) - - #ifdef CONFIG_BATMAN_ADV_BLA - bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, -- unsigned short vid, bool is_bcast); -+ unsigned short vid, int packet_type); - bool batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, - unsigned short vid); - bool batadv_bla_is_backbone_gw(struct sk_buff *skb, -@@ -67,7 +67,7 @@ bool batadv_bla_check_claim(struct batadv_priv *bat_priv, u8 *addr, - - static inline bool batadv_bla_rx(struct batadv_priv *bat_priv, - struct sk_buff *skb, unsigned short vid, -- bool is_bcast) -+ int packet_type) - { - return false; ++#include "bridge_loop_avoidance.h" + #include "hard-interface.h" + #include "hash.h" + #include "log.h" +@@ -1020,6 +1021,35 @@ batadv_mcast_forw_mode(struct batadv_pri } -diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c -index 164cc254ef6f621ef7b8fb666821d8997188664f..c99facdbd493e0eb79ee51b1a3212003497e3a32 100644 + + /** ++ * 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_forw_tt() - forwards a packet to multicast listeners + * @bat_priv: the bat priv with all the soft interface information + * @skb: the multicast packet to transmit +@@ -1056,8 +1086,8 @@ batadv_mcast_forw_tt(struct batadv_priv + break; + } + +- batadv_send_skb_unicast(bat_priv, newskb, BATADV_UNICAST, 0, +- orig_entry->orig_node, vid); ++ batadv_mcast_forw_send_orig(bat_priv, newskb, vid, ++ orig_entry->orig_node); + } + rcu_read_unlock(); + +@@ -1098,8 +1128,7 @@ batadv_mcast_forw_want_all_ipv4(struct b + break; + } + +- batadv_send_skb_unicast(bat_priv, newskb, BATADV_UNICAST, 0, +- orig_node, vid); ++ batadv_mcast_forw_send_orig(bat_priv, newskb, vid, orig_node); + } + rcu_read_unlock(); + return ret; +@@ -1136,8 +1165,7 @@ batadv_mcast_forw_want_all_ipv6(struct b + break; + } + +- batadv_send_skb_unicast(bat_priv, newskb, BATADV_UNICAST, 0, +- orig_node, vid); ++ batadv_mcast_forw_send_orig(bat_priv, newskb, vid, orig_node); + } + rcu_read_unlock(); + return ret; +--- a/net/batman-adv/multicast.h ++++ b/net/batman-adv/multicast.h +@@ -46,6 +46,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); ++ + int batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, + unsigned short vid); + +@@ -72,6 +77,16 @@ batadv_mcast_forw_mode(struct batadv_pri + } + + 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 int + batadv_mcast_forw_send(struct batadv_priv *bat_priv, struct sk_buff *skb, + unsigned short vid) + { --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c -@@ -423,10 +423,10 @@ void batadv_interface_rx(struct net_device *soft_iface, - struct vlan_ethhdr *vhdr; - struct ethhdr *ethhdr; - unsigned short vid; -- bool is_bcast; -+ int packet_type; - - batadv_bcast_packet = (struct batadv_bcast_packet *)skb->data; -- is_bcast = (batadv_bcast_packet->packet_type == BATADV_BCAST); -+ packet_type = batadv_bcast_packet->packet_type; - - skb_pull_rcsum(skb, hdr_size); - skb_reset_mac_header(skb); -@@ -469,7 +469,7 @@ void batadv_interface_rx(struct net_device *soft_iface, - /* Let the bridge loop avoidance check the packet. If will - * not handle it, we can safely push it up. - */ -- if (batadv_bla_rx(bat_priv, skb, vid, is_bcast)) -+ if (batadv_bla_rx(bat_priv, skb, vid, packet_type)) - goto out; - - if (orig_node) +@@ -363,9 +363,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 (forw_mode == BATADV_FORW_SOME) { + ret = batadv_mcast_forw_send(bat_priv, skb, vid); + } else { diff --git a/batman-adv/patches/0029-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch b/batman-adv/patches/0029-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch new file mode 100644 index 0000000..23d2a1e --- /dev/null +++ b/batman-adv/patches/0029-batman-adv-mcast-fix-duplicate-mcast-packets-in-BLA-.patch @@ -0,0 +1,150 @@ +From: Linus Lüssing +Date: Tue, 15 Sep 2020 09:54:09 +0200 +Subject: batman-adv: mcast: fix duplicate mcast packets in BLA backbone from mesh + +Scenario: +* Multicast frame send from mesh to a BLA backbone (multiple nodes + with their bat0 bridged together, with BLA enabled) + +Issue: +* BLA backbone nodes receive the frame multiple times on bat0, + once from mesh->bat0 and once from each backbone_gw from LAN + +For unicast, a node will send only to the best backbone gateway +according to the TQ. However for multicast we currently cannot determine +if multiple destination nodes share the same backbone if they don't share +the same backbone with us. So we need to keep sending the unicasts to +all backbone gateways and let the backbone gateways decide which one +will forward the frame. We can use the CLAIM mechanism to make this +decision. + +One catch: The batman-adv gateway feature for DHCP packets potentially +sends multicast packets in the same batman-adv unicast header as the +multicast optimizations code. And we are not allowed to drop those even +if we did not claim the source address of the sender, as for such +packets there is only this one multicast-in-unicast packet. + +How can we distinguish the two cases? + +The gateway feature uses a batman-adv unicast 4 address header. While +the multicast-to-unicasts feature uses a simple, 3 address batman-adv +unicast header. So let's use this to distinguish. + +Fixes: e32470167379 ("batman-adv: check incoming packet type for bla") +Signed-off-by: Linus Lüssing +Acked-by: Simon Wunderlich +Signed-off-by: Sven Eckelmann + +Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/d7665cf8a824c41c61c6e2110ab63d37eb7a8ef7 + +--- a/net/batman-adv/bridge_loop_avoidance.c ++++ b/net/batman-adv/bridge_loop_avoidance.c +@@ -1814,7 +1814,7 @@ batadv_bla_loopdetect_check(struct batad + * @bat_priv: the bat priv with all the soft interface information + * @skb: the frame to be checked + * @vid: the VLAN ID of the frame +- * @is_bcast: the packet came in a broadcast packet type. ++ * @packet_type: the batman packet type this frame came in + * + * batadv_bla_rx avoidance checks if: + * * we have to race for a claim +@@ -1826,7 +1826,7 @@ batadv_bla_loopdetect_check(struct batad + * further process the skb. + */ + bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, +- unsigned short vid, bool is_bcast) ++ unsigned short vid, int packet_type) + { + struct batadv_bla_backbone_gw *backbone_gw; + struct ethhdr *ethhdr; +@@ -1848,9 +1848,24 @@ bool batadv_bla_rx(struct batadv_priv *b + goto handled; + + if (unlikely(atomic_read(&bat_priv->bla.num_requests))) +- /* don't allow broadcasts while requests are in flight */ +- if (is_multicast_ether_addr(ethhdr->h_dest) && is_bcast) +- goto handled; ++ /* don't allow multicast packets while requests are in flight */ ++ if (is_multicast_ether_addr(ethhdr->h_dest)) ++ /* Both broadcast flooding or multicast-via-unicasts ++ * delivery might send to multiple backbone gateways ++ * sharing the same LAN and therefore need to coordinate ++ * which backbone gateway forwards into the LAN, ++ * by claiming the payload source address. ++ * ++ * Broadcast flooding and multicast-via-unicasts ++ * delivery use the following two batman packet types. ++ * Note: explicitly exclude BATADV_UNICAST_4ADDR, ++ * as the DHCP gateway feature will send explicitly ++ * to only one BLA gateway, so the claiming process ++ * should be avoided there. ++ */ ++ if (packet_type == BATADV_BCAST || ++ packet_type == BATADV_UNICAST) ++ goto handled; + + ether_addr_copy(search_claim.addr, ethhdr->h_source); + search_claim.vid = vid; +@@ -1885,13 +1900,14 @@ bool batadv_bla_rx(struct batadv_priv *b + goto allow; + } + +- /* if it is a broadcast ... */ +- if (is_multicast_ether_addr(ethhdr->h_dest) && is_bcast) { ++ /* if it is a multicast ... */ ++ if (is_multicast_ether_addr(ethhdr->h_dest) && ++ (packet_type == BATADV_BCAST || packet_type == BATADV_UNICAST)) { + /* ... drop it. the responsible gateway is in charge. + * +- * We need to check is_bcast because with the gateway ++ * We need to check packet type because with the gateway + * feature, broadcasts (like DHCP requests) may be sent +- * using a unicast packet type. ++ * using a unicast 4 address packet type. See comment above. + */ + goto handled; + } else { +--- a/net/batman-adv/bridge_loop_avoidance.h ++++ b/net/batman-adv/bridge_loop_avoidance.h +@@ -36,7 +36,7 @@ static inline bool batadv_bla_is_loopdet + + #ifdef CONFIG_BATMAN_ADV_BLA + bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, +- unsigned short vid, bool is_bcast); ++ unsigned short vid, int packet_type); + bool batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, + unsigned short vid); + bool batadv_bla_is_backbone_gw(struct sk_buff *skb, +@@ -67,7 +67,7 @@ bool batadv_bla_check_claim(struct batad + + static inline bool batadv_bla_rx(struct batadv_priv *bat_priv, + struct sk_buff *skb, unsigned short vid, +- bool is_bcast) ++ int packet_type) + { + return false; + } +--- a/net/batman-adv/soft-interface.c ++++ b/net/batman-adv/soft-interface.c +@@ -423,10 +423,10 @@ void batadv_interface_rx(struct net_devi + struct vlan_ethhdr *vhdr; + struct ethhdr *ethhdr; + unsigned short vid; +- bool is_bcast; ++ int packet_type; + + batadv_bcast_packet = (struct batadv_bcast_packet *)skb->data; +- is_bcast = (batadv_bcast_packet->packet_type == BATADV_BCAST); ++ packet_type = batadv_bcast_packet->packet_type; + + skb_pull_rcsum(skb, hdr_size); + skb_reset_mac_header(skb); +@@ -469,7 +469,7 @@ void batadv_interface_rx(struct net_devi + /* Let the bridge loop avoidance check the packet. If will + * not handle it, we can safely push it up. + */ +- if (batadv_bla_rx(bat_priv, skb, vid, is_bcast)) ++ if (batadv_bla_rx(bat_priv, skb, vid, packet_type)) + goto out; + + if (orig_node) diff --git a/batman-adv/patches/0029-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch b/batman-adv/patches/0030-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch similarity index 92% rename from batman-adv/patches/0029-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch rename to batman-adv/patches/0030-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch index bf936a8..1ab3677 100644 --- a/batman-adv/patches/0029-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch +++ b/batman-adv/patches/0030-batman-adv-mcast-fix-duplicate-mcast-packets-from-BL.patch @@ -32,11 +32,9 @@ Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/c5cb6a670cc3070d9d5c5562f95fa75faac767ba -diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c -index ffa44d7f7ee5d221e8f511a446eb079a3686844b..a6b26ca5c6973f230284eaa55ad80808593e796b 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c -@@ -1581,13 +1581,16 @@ int batadv_bla_init(struct batadv_priv *bat_priv) +@@ -1581,13 +1581,16 @@ int batadv_bla_init(struct batadv_priv * } /** @@ -44,21 +42,22 @@ index ffa44d7f7ee5d221e8f511a446eb079a3686844b..a6b26ca5c6973f230284eaa55ad80808 + * batadv_bla_check_duplist() - Check if a frame is in the broadcast dup. * @bat_priv: the bat priv with all the soft interface information - * @skb: contains the bcast_packet to be checked +- * +- * check if it is on our broadcast list. Another gateway might +- * have sent the same packet because it is connected to the same backbone, +- * so we have to remove this duplicate. + * @skb: contains the multicast packet to be checked + * @payload_ptr: pointer to position inside the head buffer of the skb + * marking the start of the data to be CRC'ed + * @orig: originator mac address, NULL if unknown - * -- * check if it is on our broadcast list. Another gateway might -- * have sent the same packet because it is connected to the same backbone, -- * so we have to remove this duplicate. ++ * + * Check if it is on our broadcast list. Another gateway might have sent the + * same packet because it is connected to the same backbone, so we have to + * remove this duplicate. * * This is performed by checking the CRC, which will tell us * with a good chance that it is the same packet. If it is furthermore -@@ -1596,19 +1599,17 @@ int batadv_bla_init(struct batadv_priv *bat_priv) +@@ -1596,19 +1599,17 @@ int batadv_bla_init(struct batadv_priv * * * Return: true if a packet is in the duplicate list, false otherwise. */ @@ -84,7 +83,7 @@ index ffa44d7f7ee5d221e8f511a446eb079a3686844b..a6b26ca5c6973f230284eaa55ad80808 spin_lock_bh(&bat_priv->bla.bcast_duplist_lock); -@@ -1627,8 +1628,21 @@ bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, +@@ -1627,8 +1628,21 @@ bool batadv_bla_check_bcast_duplist(stru if (entry->crc != crc) continue; @@ -108,7 +107,7 @@ index ffa44d7f7ee5d221e8f511a446eb079a3686844b..a6b26ca5c6973f230284eaa55ad80808 /* this entry seems to match: same crc, not too old, * and from another gw. therefore return true to forbid it. -@@ -1644,7 +1658,14 @@ bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, +@@ -1644,7 +1658,14 @@ bool batadv_bla_check_bcast_duplist(stru entry = &bat_priv->bla.bcast_duplist[curr]; entry->crc = crc; entry->entrytime = jiffies; @@ -124,11 +123,10 @@ index ffa44d7f7ee5d221e8f511a446eb079a3686844b..a6b26ca5c6973f230284eaa55ad80808 bat_priv->bla.bcast_duplist_curr = curr; out: -@@ -1653,6 +1674,48 @@ bool batadv_bla_check_bcast_duplist(struct batadv_priv *bat_priv, - return ret; +@@ -1654,6 +1675,48 @@ out: } -+/** + /** + * batadv_bla_check_ucast_duplist() - Check if a frame is in the broadcast dup. + * @bat_priv: the bat priv with all the soft interface information + * @skb: contains the multicast packet to be checked, decapsulated from a @@ -170,10 +168,11 @@ index ffa44d7f7ee5d221e8f511a446eb079a3686844b..a6b26ca5c6973f230284eaa55ad80808 + bcast_packet->orig); +} + - /** ++/** * batadv_bla_is_backbone_gw_orig() - Check if the originator is a gateway for * the VLAN identified by vid. -@@ -1867,6 +1930,14 @@ bool batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, + * @bat_priv: the bat priv with all the soft interface information +@@ -1867,6 +1930,14 @@ bool batadv_bla_rx(struct batadv_priv *b packet_type == BATADV_UNICAST) goto handled; diff --git a/batman-adv/patches/0030-batman-adv-set-.owner-to-THIS_MODULE.patch b/batman-adv/patches/0031-batman-adv-set-.owner-to-THIS_MODULE.patch similarity index 76% rename from batman-adv/patches/0030-batman-adv-set-.owner-to-THIS_MODULE.patch rename to batman-adv/patches/0031-batman-adv-set-.owner-to-THIS_MODULE.patch index b603332..73e0a6a 100644 --- a/batman-adv/patches/0030-batman-adv-set-.owner-to-THIS_MODULE.patch +++ b/batman-adv/patches/0031-batman-adv-set-.owner-to-THIS_MODULE.patch @@ -11,11 +11,9 @@ Signed-off-by: Taehee Yoo Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/6e2937539a2c9f8a8536515258bc1f08bed19a06 -diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c -index 60ce11e16a905e790424a2d7aca81c1f945c1ec2..a51fadeaefb58e75a84820998390acd3759ef3a8 100644 --- a/net/batman-adv/log.c +++ b/net/batman-adv/log.c -@@ -180,6 +180,7 @@ static const struct file_operations batadv_log_fops = { +@@ -180,6 +180,7 @@ static const struct file_operations bata .read = batadv_log_read, .poll = batadv_log_poll, .llseek = no_llseek, diff --git a/batman-adv/patches/0031-batman-adv-Consider-fragmentation-for-needed_headroo.patch b/batman-adv/patches/0032-batman-adv-Consider-fragmentation-for-needed_headroo.patch similarity index 81% rename from batman-adv/patches/0031-batman-adv-Consider-fragmentation-for-needed_headroo.patch rename to batman-adv/patches/0032-batman-adv-Consider-fragmentation-for-needed_headroo.patch index 7ce5090..1bd442f 100644 --- a/batman-adv/patches/0031-batman-adv-Consider-fragmentation-for-needed_headroo.patch +++ b/batman-adv/patches/0032-batman-adv-Consider-fragmentation-for-needed_headroo.patch @@ -14,11 +14,9 @@ Reported-by: Linus Lüssing Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/92064deda9b063ca2d5a53b307c6127a9453357c -diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c -index 62b926dd4aaeffd82da83654c8e568de2c3714fb..e0f70ae28df4e2fb0a7972a1ca9d5fcc986c0d6c 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c -@@ -553,6 +553,9 @@ static void batadv_hardif_recalc_extra_skbroom(struct net_device *soft_iface) +@@ -553,6 +553,9 @@ static void batadv_hardif_recalc_extra_s needed_headroom = lower_headroom + (lower_header_len - ETH_HLEN); needed_headroom += batadv_max_header_len(); diff --git a/batman-adv/patches/0032-batman-adv-Reserve-needed_-room-for-fragments.patch b/batman-adv/patches/0033-batman-adv-Reserve-needed_-room-for-fragments.patch similarity index 86% rename from batman-adv/patches/0032-batman-adv-Reserve-needed_-room-for-fragments.patch rename to batman-adv/patches/0033-batman-adv-Reserve-needed_-room-for-fragments.patch index 0ad2b0c..1213782 100644 --- a/batman-adv/patches/0032-batman-adv-Reserve-needed_-room-for-fragments.patch +++ b/batman-adv/patches/0033-batman-adv-Reserve-needed_-room-for-fragments.patch @@ -15,11 +15,9 @@ Fixes: db56e4ecf5c2 ("batman-adv: Fragment and send skbs larger than mtu") Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/0966d5424bb87e863037301488519ccdd69e4d26 -diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c -index 385fccdcf69d05d63f59d024dfb721b1e8f1c8b9..f1d202ff396cd69949915a9e90e763f3a68255b7 100644 --- a/net/batman-adv/fragmentation.c +++ b/net/batman-adv/fragmentation.c -@@ -391,6 +391,7 @@ bool batadv_frag_skb_fwd(struct sk_buff *skb, +@@ -391,6 +391,7 @@ out: /** * batadv_frag_create() - create a fragment from skb @@ -27,7 +25,7 @@ index 385fccdcf69d05d63f59d024dfb721b1e8f1c8b9..f1d202ff396cd69949915a9e90e763f3 * @skb: skb to create fragment from * @frag_head: header to use in new fragment * @fragment_size: size of new fragment -@@ -401,22 +402,25 @@ bool batadv_frag_skb_fwd(struct sk_buff *skb, +@@ -401,22 +402,25 @@ out: * * Return: the new fragment, NULL on error. */ @@ -56,7 +54,7 @@ index 385fccdcf69d05d63f59d024dfb721b1e8f1c8b9..f1d202ff396cd69949915a9e90e763f3 skb_split(skb, skb_fragment, skb->len - fragment_size); /* Add the header */ -@@ -439,11 +443,12 @@ int batadv_frag_send_packet(struct sk_buff *skb, +@@ -439,11 +443,12 @@ int batadv_frag_send_packet(struct sk_bu struct batadv_orig_node *orig_node, struct batadv_neigh_node *neigh_node) { @@ -70,7 +68,7 @@ index 385fccdcf69d05d63f59d024dfb721b1e8f1c8b9..f1d202ff396cd69949915a9e90e763f3 unsigned int header_size = sizeof(frag_header); unsigned int max_fragment_size, num_fragments; int ret; -@@ -503,7 +508,7 @@ int batadv_frag_send_packet(struct sk_buff *skb, +@@ -503,7 +508,7 @@ int batadv_frag_send_packet(struct sk_bu goto put_primary_if; } diff --git a/batman-adv/patches/0033-batman-adv-Don-t-always-reallocate-the-fragmentation.patch b/batman-adv/patches/0034-batman-adv-Don-t-always-reallocate-the-fragmentation.patch similarity index 85% rename from batman-adv/patches/0033-batman-adv-Don-t-always-reallocate-the-fragmentation.patch rename to batman-adv/patches/0034-batman-adv-Don-t-always-reallocate-the-fragmentation.patch index 00bc3f2..19dde12 100644 --- a/batman-adv/patches/0033-batman-adv-Don-t-always-reallocate-the-fragmentation.patch +++ b/batman-adv/patches/0034-batman-adv-Don-t-always-reallocate-the-fragmentation.patch @@ -15,11 +15,9 @@ Fixes: db56e4ecf5c2 ("batman-adv: Fragment and send skbs larger than mtu") Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/3e3ff987876d3be70d928561acbefe5a48ab1654 -diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c -index f1d202ff396cd69949915a9e90e763f3a68255b7..0da90e73c79bffe86072f0d704f0777d76b35f4c 100644 --- a/net/batman-adv/fragmentation.c +++ b/net/batman-adv/fragmentation.c -@@ -527,13 +527,14 @@ int batadv_frag_send_packet(struct sk_buff *skb, +@@ -527,13 +527,14 @@ int batadv_frag_send_packet(struct sk_bu frag_header.no++; } diff --git a/batman-adv/patches/0001-batman-adv-Avoid-WARN_ON-timing-related-checks.patch b/batman-adv/patches/0035-batman-adv-Avoid-WARN_ON-timing-related-checks.patch similarity index 82% rename from batman-adv/patches/0001-batman-adv-Avoid-WARN_ON-timing-related-checks.patch rename to batman-adv/patches/0035-batman-adv-Avoid-WARN_ON-timing-related-checks.patch index dda2034..0fcb9ec 100644 --- a/batman-adv/patches/0001-batman-adv-Avoid-WARN_ON-timing-related-checks.patch +++ b/batman-adv/patches/0035-batman-adv-Avoid-WARN_ON-timing-related-checks.patch @@ -15,11 +15,9 @@ Fixes: 29b9256e6631 ("batman-adv: consider outgoing interface in OGM sending") Signed-off-by: Sven Eckelmann Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/5061f9c502d7101912089d8f4a7866e0a926a49a -diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c -index bd4138ddf7e09a0020d9842d603dc98f21e225c7..2d398ac762aa612b6da2f64874bd07a6d84d5220 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c -@@ -373,8 +373,10 @@ static void batadv_iv_ogm_emit(struct batadv_forw_packet *forw_packet) +@@ -409,8 +409,10 @@ static void batadv_iv_ogm_emit(struct ba if (WARN_ON(!forw_packet->if_outgoing)) return; From 7a3e63fd45fe2ab6016e3f89cee79f150e2345a1 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 19 Nov 2021 17:05:03 +0100 Subject: [PATCH 2/2] batman-adv: Merge bugfixes from 2021.4 * fix error handling during interface initialization Signed-off-by: Sven Eckelmann --- .../0036-batman-adv-fix-error-handling.patch | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 batman-adv/patches/0036-batman-adv-fix-error-handling.patch diff --git a/batman-adv/patches/0036-batman-adv-fix-error-handling.patch b/batman-adv/patches/0036-batman-adv-fix-error-handling.patch new file mode 100644 index 0000000..0daaae4 --- /dev/null +++ b/batman-adv/patches/0036-batman-adv-fix-error-handling.patch @@ -0,0 +1,162 @@ +From: Pavel Skripkin +Date: Sun, 24 Oct 2021 16:13:56 +0300 +Subject: batman-adv: fix error handling + +Syzbot reported ODEBUG warning in batadv_nc_mesh_free(). The problem was +in wrong error handling in batadv_mesh_init(). + +Before this patch batadv_mesh_init() was calling batadv_mesh_free() in case +of any batadv_*_init() calls failure. This approach may work well, when +there is some kind of indicator, which can tell which parts of batadv are +initialized; but there isn't any. + +All written above lead to cleaning up uninitialized fields. Even if we hide +ODEBUG warning by initializing bat_priv->nc.work, syzbot was able to hit +GPF in batadv_nc_purge_paths(), because hash pointer in still NULL. [1] + +To fix these bugs we can unwind batadv_*_init() calls one by one. +It is good approach for 2 reasons: 1) It fixes bugs on error handling +path 2) It improves the performance, since we won't call unneeded +batadv_*_free() functions. + +So, this patch makes all batadv_*_init() clean up all allocated memory +before returning with an error to no call correspoing batadv_*_free() +and open-codes batadv_mesh_free() with proper order to avoid touching +uninitialized fields. + +Link: https://lore.kernel.org/netdev/000000000000c87fbd05cef6bcb0@google.com/ [1] +Reported-and-tested-by: syzbot+28b0702ada0bf7381f58@syzkaller.appspotmail.com +Fixes: 21e838760727 ("[batman-adv] fix various race conditions during startup & shutdown") +Signed-off-by: Pavel Skripkin +Signed-off-by: David S. Miller +Signed-off-by: Sven Eckelmann +Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/0631e0825c8129cd3896926da62a09ac00bf13a0 + +--- a/net/batman-adv/bridge_loop_avoidance.c ++++ b/net/batman-adv/bridge_loop_avoidance.c +@@ -1561,10 +1561,14 @@ int batadv_bla_init(struct batadv_priv * + return 0; + + bat_priv->bla.claim_hash = batadv_hash_new(128); +- bat_priv->bla.backbone_hash = batadv_hash_new(32); ++ if (!bat_priv->bla.claim_hash) ++ return -ENOMEM; + +- if (!bat_priv->bla.claim_hash || !bat_priv->bla.backbone_hash) ++ bat_priv->bla.backbone_hash = batadv_hash_new(32); ++ if (!bat_priv->bla.backbone_hash) { ++ batadv_hash_destroy(bat_priv->bla.claim_hash); + return -ENOMEM; ++ } + + batadv_hash_set_lock_class(bat_priv->bla.claim_hash, + &batadv_claim_hash_lock_class_key); +--- a/net/batman-adv/main.c ++++ b/net/batman-adv/main.c +@@ -197,29 +197,41 @@ int batadv_mesh_init(struct net_device * + + bat_priv->gw.generation = 0; + +- ret = batadv_v_mesh_init(bat_priv); +- if (ret < 0) +- goto err; +- + ret = batadv_originator_init(bat_priv); +- if (ret < 0) +- goto err; ++ if (ret < 0) { ++ atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING); ++ goto err_orig; ++ } + + ret = batadv_tt_init(bat_priv); +- if (ret < 0) +- goto err; ++ if (ret < 0) { ++ atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING); ++ goto err_tt; ++ } ++ ++ ret = batadv_v_mesh_init(bat_priv); ++ if (ret < 0) { ++ atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING); ++ goto err_v; ++ } + + ret = batadv_bla_init(bat_priv); +- if (ret < 0) +- goto err; ++ if (ret < 0) { ++ atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING); ++ goto err_bla; ++ } + + ret = batadv_dat_init(bat_priv); +- if (ret < 0) +- goto err; ++ if (ret < 0) { ++ atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING); ++ goto err_dat; ++ } + + ret = batadv_nc_mesh_init(bat_priv); +- if (ret < 0) +- goto err; ++ if (ret < 0) { ++ atomic_set(&bat_priv->mesh_state, BATADV_MESH_DEACTIVATING); ++ goto err_nc; ++ } + + batadv_gw_init(bat_priv); + batadv_mcast_init(bat_priv); +@@ -229,8 +241,20 @@ int batadv_mesh_init(struct net_device * + + return 0; + +-err: +- batadv_mesh_free(soft_iface); ++err_nc: ++ batadv_dat_free(bat_priv); ++err_dat: ++ batadv_bla_free(bat_priv); ++err_bla: ++ batadv_v_mesh_free(bat_priv); ++err_v: ++ batadv_tt_free(bat_priv); ++err_tt: ++ batadv_originator_free(bat_priv); ++err_orig: ++ batadv_purge_outstanding_packets(bat_priv, NULL); ++ atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE); ++ + return ret; + } + +--- a/net/batman-adv/network-coding.c ++++ b/net/batman-adv/network-coding.c +@@ -155,8 +155,10 @@ int batadv_nc_mesh_init(struct batadv_pr + &batadv_nc_coding_hash_lock_class_key); + + bat_priv->nc.decoding_hash = batadv_hash_new(128); +- if (!bat_priv->nc.decoding_hash) ++ if (!bat_priv->nc.decoding_hash) { ++ batadv_hash_destroy(bat_priv->nc.coding_hash); + goto err; ++ } + + batadv_hash_set_lock_class(bat_priv->nc.decoding_hash, + &batadv_nc_decoding_hash_lock_class_key); +--- a/net/batman-adv/translation-table.c ++++ b/net/batman-adv/translation-table.c +@@ -4405,8 +4405,10 @@ int batadv_tt_init(struct batadv_priv *b + return ret; + + ret = batadv_tt_global_init(bat_priv); +- if (ret < 0) ++ if (ret < 0) { ++ batadv_tt_local_table_free(bat_priv); + return ret; ++ } + + batadv_tvlv_handler_register(bat_priv, batadv_tt_tvlv_ogm_handler_v1, + batadv_tt_tvlv_unicast_handler_v1,