]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: hsr: fix hsr_init_sk() vs network/transport headers.
authorEric Dumazet <edumazet@google.com>
Fri, 22 Nov 2024 17:13:43 +0000 (17:13 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Dec 2024 12:54:00 +0000 (13:54 +0100)
[ Upstream commit 9cfb5e7f0ded2bfaabc270ceb5f91d13f0e805b9 ]

Following sequence in hsr_init_sk() is invalid :

    skb_reset_mac_header(skb);
    skb_reset_mac_len(skb);
    skb_reset_network_header(skb);
    skb_reset_transport_header(skb);

It is invalid because skb_reset_mac_len() needs the correct
network header, which should be after the mac header.

This patch moves the skb_reset_network_header()
and skb_reset_transport_header() before
the call to dev_hard_header().

As a result skb->mac_len is no longer set to a value
close to 65535.

Fixes: 48b491a5cc74 ("net: hsr: fix mac_len checks")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: George McCollister <george.mccollister@gmail.com>
Link: https://patch.msgid.link/20241122171343.897551-1-edumazet@google.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/hsr/hsr_device.c

index 049e22bdaafb74ab486ca8bf2ed8e5100e64273b..1f40259597bc062c7731e0956bd0ca5987042aaf 100644 (file)
@@ -266,6 +266,8 @@ static struct sk_buff *hsr_init_skb(struct hsr_port *master)
        skb->dev = master->dev;
        skb->priority = TC_PRIO_CONTROL;
 
+       skb_reset_network_header(skb);
+       skb_reset_transport_header(skb);
        if (dev_hard_header(skb, skb->dev, ETH_P_PRP,
                            hsr->sup_multicast_addr,
                            skb->dev->dev_addr, skb->len) <= 0)
@@ -273,8 +275,6 @@ static struct sk_buff *hsr_init_skb(struct hsr_port *master)
 
        skb_reset_mac_header(skb);
        skb_reset_mac_len(skb);
-       skb_reset_network_header(skb);
-       skb_reset_transport_header(skb);
 
        return skb;
 out: