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 dabc78b644)
			
			
This commit is contained in:
		| @@ -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)) { | ||||
| @@ -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, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau