mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 01:32:21 +02:00
When an HSR master device is brought UP, it auto-adds VLAN 0 via
vlan_vid0_add(), which propagates VID 0 to its slave devices (slave A and B).
If a slave device is later unregistered while HSR is active (e.g., during
netns cleanup or interface destruction), hsr_del_port() is called to
detach the slave port from the HSR master. However, hsr_del_port() currently
does not delete the VLAN IDs that were synced to the slave device by HSR.
As a result, the slave device retains a refcount on VID 0 (and any other
synced VLANs). When the slave device is destroyed, its vlan_info /
vlan_vid_info structure remains allocated, leading to a memory leak.
Fix this by calling vlan_vids_del_by_dev(port->dev, master->dev) in
hsr_del_port() before unlinking slave A or slave B ports, matching the
propagation logic in hsr_ndo_vlan_rx_add_vid() / hsr_ndo_vlan_rx_kill_vid()
and the cleanup behavior in bonding and team drivers.
Fixes:
|
||
|---|---|---|
| .. | ||
| hsr_debugfs.c | ||
| hsr_device.c | ||
| hsr_device.h | ||
| hsr_forward.c | ||
| hsr_forward.h | ||
| hsr_framereg.c | ||
| hsr_framereg.h | ||
| hsr_main.c | ||
| hsr_main.h | ||
| hsr_netlink.c | ||
| hsr_netlink.h | ||
| hsr_slave.c | ||
| hsr_slave.h | ||
| Kconfig | ||
| Makefile | ||
| prp_dup_discard_test.c | ||