if (res)
                goto err_unregister;
 
+       if (protocol_version == PRP_V1) {
+               eth_hw_addr_set(slave[1], slave[0]->dev_addr);
+               call_netdevice_notifiers(NETDEV_CHANGEADDR, slave[1]);
+       }
+
        if (interlink) {
                res = hsr_add_port(hsr, interlink, HSR_PT_INTERLINK, extack);
                if (res)
 
                        eth_hw_addr_set(master->dev, dev->dev_addr);
                        call_netdevice_notifiers(NETDEV_CHANGEADDR,
                                                 master->dev);
+
+                       if (hsr->prot_version == PRP_V1) {
+                               port = hsr_port_get_hsr(hsr, HSR_PT_SLAVE_B);
+                               if (port) {
+                                       eth_hw_addr_set(port->dev, dev->dev_addr);
+                                       call_netdevice_notifiers(NETDEV_CHANGEADDR,
+                                                                port->dev);
+                               }
+                       }
                }
 
                /* Make sure we recognize frames from ourselves in hsr_rcv() */
 
        struct hsr_priv         *hsr;
        enum hsr_port_type      type;
        struct rcu_head         rcu;
+       unsigned char           original_macaddress[ETH_ALEN];
 };
 
 struct hsr_frame_info;
 
        port->hsr = hsr;
        port->dev = dev;
        port->type = type;
+       ether_addr_copy(port->original_macaddress, dev->dev_addr);
 
        if (type != HSR_PT_MASTER) {
                res = hsr_portdev_setup(hsr, dev, port, extack);
                if (!port->hsr->fwd_offloaded)
                        dev_set_promiscuity(port->dev, -1);
                netdev_upper_dev_unlink(port->dev, master->dev);
+               eth_hw_addr_set(port->dev, port->original_macaddress);
        }
 
        kfree_rcu(port, rcu);