Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 60154a1e authored by Sven Eckelmann's avatar Sven Eckelmann Committed by Simon Wunderlich
Browse files

batman-adv: Avoid nullptr dereference in dat after vlan_insert_tag



vlan_insert_tag can return NULL on errors. The distributed arp table code
therefore has to check the return value of vlan_insert_tag for NULL before
it can safely operate on this pointer.

Fixes: be1db4f6 ("batman-adv: make the Distributed ARP Table vlan aware")
Signed-off-by: default avatarSven Eckelmann <sven@narfation.org>
Signed-off-by: default avatarMarek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: default avatarSimon Wunderlich <sw@simonwunderlich.de>
parent 10c78f58
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -1009,9 +1009,12 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
		if (!skb_new)
		if (!skb_new)
			goto out;
			goto out;


		if (vid & BATADV_VLAN_HAS_TAG)
		if (vid & BATADV_VLAN_HAS_TAG) {
			skb_new = vlan_insert_tag(skb_new, htons(ETH_P_8021Q),
			skb_new = vlan_insert_tag(skb_new, htons(ETH_P_8021Q),
						  vid & VLAN_VID_MASK);
						  vid & VLAN_VID_MASK);
			if (!skb_new)
				goto out;
		}


		skb_reset_mac_header(skb_new);
		skb_reset_mac_header(skb_new);
		skb_new->protocol = eth_type_trans(skb_new,
		skb_new->protocol = eth_type_trans(skb_new,
@@ -1089,9 +1092,12 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
	 */
	 */
	skb_reset_mac_header(skb_new);
	skb_reset_mac_header(skb_new);


	if (vid & BATADV_VLAN_HAS_TAG)
	if (vid & BATADV_VLAN_HAS_TAG) {
		skb_new = vlan_insert_tag(skb_new, htons(ETH_P_8021Q),
		skb_new = vlan_insert_tag(skb_new, htons(ETH_P_8021Q),
					  vid & VLAN_VID_MASK);
					  vid & VLAN_VID_MASK);
		if (!skb_new)
			goto out;
	}


	/* To preserve backwards compatibility, the node has choose the outgoing
	/* To preserve backwards compatibility, the node has choose the outgoing
	 * format based on the incoming request packet type. The assumption is
	 * format based on the incoming request packet type. The assumption is