aboutsummaryrefslogtreecommitdiff
path: root/net/hsr/hsr_device.c
diff options
context:
space:
mode:
authorGravatar George McCollister <george.mccollister@gmail.com> 2021-05-24 13:50:54 -0500
committerGravatar David S. Miller <davem@davemloft.net> 2021-05-24 14:10:28 -0700
commit48b491a5cc74333c4a6a82fe21cea42c055a3b0b (patch)
tree26ea4fa3badf5fbf8bd12d290a8c81a75250a25e /net/hsr/hsr_device.c
parentnet: appletalk: cops: Fix data race in cops_probe1 (diff)
downloadlinux-48b491a5cc74333c4a6a82fe21cea42c055a3b0b.tar.gz
linux-48b491a5cc74333c4a6a82fe21cea42c055a3b0b.tar.bz2
linux-48b491a5cc74333c4a6a82fe21cea42c055a3b0b.zip
net: hsr: fix mac_len checks
Commit 2e9f60932a2c ("net: hsr: check skb can contain struct hsr_ethhdr in fill_frame_info") added the following which resulted in -EINVAL always being returned: if (skb->mac_len < sizeof(struct hsr_ethhdr)) return -EINVAL; mac_len was not being set correctly so this check completely broke HSR/PRP since it was always 14, not 20. Set mac_len correctly and modify the mac_len checks to test in the correct places since sometimes it is legitimately 14. Fixes: 2e9f60932a2c ("net: hsr: check skb can contain struct hsr_ethhdr in fill_frame_info") Signed-off-by: George McCollister <george.mccollister@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/hsr/hsr_device.c')
-rw-r--r--net/hsr/hsr_device.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c
index bfcdc75fc01e..26c32407f029 100644
--- a/net/hsr/hsr_device.c
+++ b/net/hsr/hsr_device.c
@@ -218,6 +218,7 @@ static netdev_tx_t hsr_dev_xmit(struct sk_buff *skb, struct net_device *dev)
if (master) {
skb->dev = master->dev;
skb_reset_mac_header(skb);
+ skb_reset_mac_len(skb);
hsr_forward_skb(skb, master);
} else {
atomic_long_inc(&dev->tx_dropped);
@@ -259,6 +260,7 @@ static struct sk_buff *hsr_init_skb(struct hsr_port *master)
goto out;
skb_reset_mac_header(skb);
+ skb_reset_mac_len(skb);
skb_reset_network_header(skb);
skb_reset_transport_header(skb);