Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma
[cascardo/linux.git] / net / batman-adv / distributed-arp-table.c
index edee504..b25fd64 100644 (file)
@@ -277,7 +277,7 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,
        /* if this entry is already known, just update it */
        if (dat_entry) {
                if (!batadv_compare_eth(dat_entry->mac_addr, mac_addr))
-                       memcpy(dat_entry->mac_addr, mac_addr, ETH_ALEN);
+                       ether_addr_copy(dat_entry->mac_addr, mac_addr);
                dat_entry->last_update = jiffies;
                batadv_dbg(BATADV_DBG_DAT, bat_priv,
                           "Entry updated: %pI4 %pM (vid: %d)\n",
@@ -292,7 +292,7 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,
 
        dat_entry->ip = ip;
        dat_entry->vid = vid;
-       memcpy(dat_entry->mac_addr, mac_addr, ETH_ALEN);
+       ether_addr_copy(dat_entry->mac_addr, mac_addr);
        dat_entry->last_update = jiffies;
        atomic_set(&dat_entry->refcount, 2);
 
@@ -1027,6 +1027,11 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
        if (!skb_new)
                goto out;
 
+       /* the rest of the TX path assumes that the mac_header offset pointing
+        * to the inner Ethernet header has been set, therefore reset it now.
+        */
+       skb_reset_mac_header(skb_new);
+
        if (vid & BATADV_VLAN_HAS_TAG)
                skb_new = vlan_insert_tag(skb_new, htons(ETH_P_8021Q),
                                          vid & VLAN_VID_MASK);