[PATCH net-next] net: hsr: emit notification for PRP slave2 changed hw addr on port deletion

Fernando Fernandez Mancera
2026-04-03T12:40:06Z

On PRP protocol, when deleting the port the MAC address change
notification was missing. In addition to that, make sure to only perform
the MAC address change on slave2 deletion and PRP protocol as the
operation isn't necessary for HSR nor slave1.

Note that the eth_hw_addr_set() is correct on PRP context as the slaves
are either in promiscuous mode or forward offload enabled.

Fixes: b65999e7238e ("net: hsr: sync hw addr of slave2 according to slave1 hw addr on PRP")
Reported-by: Luka Gejak <luka.gejak@linux.dev>
Closes: https://lore.kernel.org/netdev/DHFCZEM93FTT.1RWFBIE32K7OT@linux.dev/
Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
---
Note: routed through net-next tree as the next net tree as rc6 batch is
already out and I do not think this is worth to be included in a last
call batch. Anyway, if maintainer thinks it is, feel free to apply it to
net tree.
---
net/hsr/hsr_slave.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/net/hsr/hsr_slave.c b/net/hsr/hsr_slave.c
index 44f83c8c56a7..d9af9e65f72f 100644
--- a/net/hsr/hsr_slave.c
+++ b/net/hsr/hsr_slave.c
@@ -243,7 +243,11 @@ void hsr_del_port(struct hsr_port *port)
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);
+ if (hsr->prot_version == PRP_V1 &&
+ port->type == HSR_PT_SLAVE_B) {
+ eth_hw_addr_set(port->dev, port->original_macaddress);
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, port->dev);
+ }
}

kfree_rcu(port, rcu);
--
2.53.0