]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
hsr: Fix supervision frame sending on HSRv0
authorFelix Maurer <fmaurer@redhat.com>
Tue, 11 Nov 2025 16:29:32 +0000 (17:29 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Nov 2025 09:35:52 +0000 (10:35 +0100)
[ Upstream commit 96a3a03abf3d8cc38cd9cb0d280235fbcf7c3f7f ]

On HSRv0, no supervision frames were sent. The supervison frames were
generated successfully, but failed the check for a sufficiently long mac
header, i.e., at least sizeof(struct hsr_ethhdr), in hsr_fill_frame_info()
because the mac header only contained the ethernet header.

Fix this by including the HSR header in the mac header when generating HSR
supervision frames. Note that the mac header now also includes the TLV
fields. This matches how we set the headers on rx and also the size of
struct hsrv0_ethhdr_sp.

Reported-by: Hangbin Liu <liuhangbin@gmail.com>
Closes: https://lore.kernel.org/netdev/aMONxDXkzBZZRfE5@fedora/
Fixes: 9cfb5e7f0ded ("net: hsr: fix hsr_init_sk() vs network/transport headers.")
Signed-off-by: Felix Maurer <fmaurer@redhat.com>
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Link: https://patch.msgid.link/4354114fea9a642fe71f49aeeb6c6159d1d61840.1762876095.git.fmaurer@redhat.com
Tested-by: Hangbin Liu <liuhangbin@gmail.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/hsr/hsr_device.c

index d2ae9fbed9e30c8ee3e53854351026d0d4088fa8..ae368cdcbd9363eeeca8276bf2a765c5a4b93ef0 100644 (file)
@@ -320,6 +320,9 @@ static void send_hsr_supervision_frame(struct hsr_port *port,
        }
 
        hsr_stag = skb_put(skb, sizeof(struct hsr_sup_tag));
+       skb_set_network_header(skb, ETH_HLEN + HSR_HLEN);
+       skb_reset_mac_len(skb);
+
        set_hsr_stag_path(hsr_stag, (hsr->prot_version ? 0x0 : 0xf));
        set_hsr_stag_HSR_ver(hsr_stag, hsr->prot_version);