summaryrefslogtreecommitdiffstats
path: root/net/hsr/hsr_device.h
diff options
context:
space:
mode:
authorCong Wang <xiyou.wangcong@gmail.com>2019-07-09 23:24:54 -0700
committerDavid S. Miller <davem@davemloft.net>2019-07-11 14:37:45 -0700
commit311633b604063a8a5d3fbc74d0565b42df721f68 (patch)
tree38c375bc8034c2539c0f2111d2d72df43a3fc83f /net/hsr/hsr_device.h
parentaa4c0c9091b0bb4cb261bbe0718d17c2834c4690 (diff)
downloadlinux-311633b604063a8a5d3fbc74d0565b42df721f68.tar.gz
linux-311633b604063a8a5d3fbc74d0565b42df721f68.tar.bz2
linux-311633b604063a8a5d3fbc74d0565b42df721f68.zip
hsr: switch ->dellink() to ->ndo_uninit()
Switching from ->priv_destructor to dellink() has an unexpected consequence: existing RCU readers, that is, hsr_port_get_hsr() callers, may still be able to read the port list. Instead of checking the return value of each hsr_port_get_hsr(), we can just move it to ->ndo_uninit() which is called after device unregister and synchronize_net(), and we still have RTNL lock there. Fixes: b9a1e627405d ("hsr: implement dellink to clean up resources") Fixes: edf070a0fb45 ("hsr: fix a NULL pointer deref in hsr_dev_xmit()") Reported-by: syzbot+097ef84cdc95843fbaa8@syzkaller.appspotmail.com Cc: Arvid Brodin <arvid.brodin@alten.se> Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/hsr/hsr_device.h')
-rw-r--r--net/hsr/hsr_device.h1
1 files changed, 0 insertions, 1 deletions
diff --git a/net/hsr/hsr_device.h b/net/hsr/hsr_device.h
index d0fa6b0696d2..6d7759c4f5f9 100644
--- a/net/hsr/hsr_device.h
+++ b/net/hsr/hsr_device.h
@@ -14,7 +14,6 @@
void hsr_dev_setup(struct net_device *dev);
int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2],
unsigned char multicast_spec, u8 protocol_version);
-void hsr_dev_destroy(struct net_device *hsr_dev);
void hsr_check_carrier_and_operstate(struct hsr_priv *hsr);
bool is_hsr_master(struct net_device *dev);
int hsr_get_max_mtu(struct hsr_priv *hsr);