]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
batman-adv: ensure bcast is writable before modifying TTL
authorSven Eckelmann <sven@narfation.org>
Wed, 10 Jun 2026 11:33:19 +0000 (13:33 +0200)
committerSven Eckelmann <sven@narfation.org>
Sat, 13 Jun 2026 05:51:17 +0000 (07:51 +0200)
Before batman-adv is allowed to write to an skb, it either has to have its
own copy of the skb or used skb_cow() to ensure that the data part is not
shared.

The old implementation used a shared queue and created copies before
attempting to write to it. But with the new implementation, the broadcast
packet is already modified when it gets received. Potentially writing to
shared buffers in this process.

Adding a skb_cow() right before this operation avoids this and can at the
same time prepare it for the modifications required to rebroadcast the
packet.

Cc: stable@kernel.org
Fixes: 3f69339068f9 ("batman-adv: bcast: queue per interface, if needed")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
net/batman-adv/routing.c

index cd4368b846addba339b0533a7fe54e422ee9d295..7b4acd1ad991aa8f2f459d3bcac33e47a10a60d7 100644 (file)
@@ -1191,6 +1191,12 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
        if (batadv_is_my_mac(bat_priv, bcast_packet->orig))
                goto free_skb;
 
+       /* create a copy of the skb, if needed, to modify it. */
+       if (skb_cow(skb, ETH_HLEN) < 0)
+               goto free_skb;
+
+       bcast_packet = (struct batadv_bcast_packet *)skb->data;
+
        if (bcast_packet->ttl-- < 2)
                goto free_skb;