diff options
author | Felix Fietkau <nbd@nbd.name> | 2022-02-16 20:32:27 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2022-02-16 20:38:59 +0100 |
commit | adb65008c859ebbe3b2c923ab11eba1d5f560e3e (patch) | |
tree | 038ed3609d5aeded31ffa2a94e450edc0690e2fd /target/linux | |
parent | b7af850bd2a944d01ee2f30b79062fed025e9a02 (diff) | |
download | upstream-adb65008c859ebbe3b2c923ab11eba1d5f560e3e.tar.gz upstream-adb65008c859ebbe3b2c923ab11eba1d5f560e3e.tar.bz2 upstream-adb65008c859ebbe3b2c923ab11eba1d5f560e3e.zip |
kernel: backport fix for initializing skb->cb in the bridge code to 5.4
Fixes issues with proxyarp
Signed-off-by: Felix Fietkau <nbd@nbd.name>
(cherry-picked from commit dabc78b644c0fb8f17ff5456f6cb92e78b53f248)
Diffstat (limited to 'target/linux')
2 files changed, 30 insertions, 2 deletions
diff --git a/target/linux/generic/backport-5.4/610-v5.9-net-bridge-clear-bridge-s-private-skb-space-on-xmit.patch b/target/linux/generic/backport-5.4/610-v5.9-net-bridge-clear-bridge-s-private-skb-space-on-xmit.patch new file mode 100644 index 0000000000..f1862943f8 --- /dev/null +++ b/target/linux/generic/backport-5.4/610-v5.9-net-bridge-clear-bridge-s-private-skb-space-on-xmit.patch @@ -0,0 +1,28 @@ +From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> +Date: Fri, 31 Jul 2020 19:26:16 +0300 +Subject: [PATCH] net: bridge: clear bridge's private skb space on xmit + +We need to clear all of the bridge private skb variables as they can be +stale due to the packet being recirculated through the stack and then +transmitted through the bridge device. Similar memset is already done on +bridge's input. We've seen cases where proxyarp_replied was 1 on routed +multicast packets transmitted through the bridge to ports with neigh +suppress which were getting dropped. Same thing can in theory happen with +the port isolation bit as well. + +Fixes: 821f1b21cabb ("bridge: add new BR_NEIGH_SUPPRESS port flag to suppress arp and nd flood") +Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- + +--- a/net/bridge/br_device.c ++++ b/net/bridge/br_device.c +@@ -36,6 +36,8 @@ netdev_tx_t br_dev_xmit(struct sk_buff * + struct ethhdr *eth; + u16 vid = 0; + ++ memset(skb->cb, 0, sizeof(struct br_input_skb_cb)); ++ + rcu_read_lock(); + nf_ops = rcu_dereference(nf_br_ops); + if (nf_ops && nf_ops->br_dev_xmit_hook(skb)) { diff --git a/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch b/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch index d47482dc67..fcfac748cb 100644 --- a/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch +++ b/target/linux/generic/pending-5.4/643-net-bridge-support-hardware-flow-table-offload.patch @@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #include <linux/uaccess.h> #include "br_private.h" -@@ -382,6 +386,28 @@ static const struct ethtool_ops br_ethto +@@ -384,6 +388,28 @@ static const struct ethtool_ops br_ethto .get_link = ethtool_op_get_link, }; @@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static const struct net_device_ops br_netdev_ops = { .ndo_open = br_dev_open, .ndo_stop = br_dev_stop, -@@ -410,6 +436,9 @@ static const struct net_device_ops br_ne +@@ -412,6 +438,9 @@ static const struct net_device_ops br_ne .ndo_bridge_setlink = br_setlink, .ndo_bridge_dellink = br_dellink, .ndo_features_check = passthru_features_check, |