freebsd-nq/sys/netgraph
Mark Johnston cd698c5179 netgraph: Fix ng_ether's shutdown handing
When tearing down a VNET, netgraph sends shutdown messages to all of the
nodes before detaching interfaces (SI_SUB_NETGRAPH comes before
SI_SUB_INIT_IF in teardown order).  ng_ether nodes handle this by
destroying themselves without detaching from the parent ifnet.  Then,
when ifnets go away they detach their ng_ether nodes again, triggering a
use-after-free.

Handle this by modifying ng_ether_shutdown() to detach from the ifnet.
If the shutdown was triggered by an ifnet being destroyed, we will clear
priv->ifp in the ng_ether detach callback, so priv->ifp may be NULL.

Also get rid of the printf in vnet_netgraph_uninit().  It can be
triggered trivially by ng_ether since ng_ether_shutdown() persists the
node unless NG_REALLY_DIE is set.

PR:		233622
Reviewed by:	afedorov, kp, Lutz Donnerhacke
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D27662
2020-12-23 00:12:16 -05:00
..
atm net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
bluetooth net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
netflow net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
netgraph.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_async.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_async.h
ng_atmllc.c
ng_atmllc.h
ng_base.c netgraph: Fix ng_ether's shutdown handing 2020-12-23 00:12:16 -05:00
ng_bpf.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_bpf.h
ng_bridge.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_bridge.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_car.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_car.h Fix spelling of "dropped". 2020-03-04 22:32:40 +00:00
ng_checksum.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_checksum.h
ng_cisco.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_cisco.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_deflate.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_deflate.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_device.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_device.h
ng_echo.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_echo.h
ng_eiface.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_eiface.h
ng_etf.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_etf.h
ng_ether_echo.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_ether_echo.h
ng_ether.c netgraph: Fix ng_ether's shutdown handing 2020-12-23 00:12:16 -05:00
ng_ether.h
ng_frame_relay.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_frame_relay.h
ng_gif_demux.c
ng_gif_demux.h
ng_gif.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_gif.h
ng_hole.c
ng_hole.h
ng_hub.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_hub.h
ng_iface.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_iface.h ng_iface(4): Remove unsupported protocols. 2020-07-31 14:08:54 +00:00
ng_ip_input.c Widen NET_EPOCH coverage. 2019-10-07 22:40:05 +00:00
ng_ip_input.h
ng_ipfw.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_ipfw.h
ng_ksocket.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_ksocket.h
ng_l2tp.c ng_l2tp: Fix callout synchronization in the rexmit timeout handler 2020-09-25 18:55:50 +00:00
ng_l2tp.h
ng_lmi.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_lmi.h
ng_macfilter.c netgraph: macfilter: small fixes 2020-12-09 15:28:56 +00:00
ng_macfilter.h New Netgraph module ng_macfilter: 2020-12-08 15:09:42 +00:00
ng_message.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_mppc.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_mppc.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_nat.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_nat.h ng_nat: unbreak ABI 2020-11-10 02:26:44 +00:00
ng_one2many.c
ng_one2many.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_parse.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_parse.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_patch.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_patch.h
ng_pipe.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_pipe.h Increase BER to PER lookup table size in an attempt to mitigate panics 2020-08-18 22:46:46 +00:00
ng_ppp.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_ppp.h
ng_pppoe.c ng_ether: Enter NET_EPOCH where required 2020-09-02 11:49:22 +00:00
ng_pppoe.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_pptpgre.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_pptpgre.h
ng_pred1.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_pred1.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_rfc1490.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_rfc1490.h
ng_sample.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_sample.h
ng_socket.c [ng_socket] Don't take the SOCKBUF_LOCK() twice in the RX data path. 2020-12-17 18:15:07 +00:00
ng_socket.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_socketvar.h
ng_source.c ng_source(4): correction after the change r340617 2018-11-27 04:05:38 +00:00
ng_source.h
ng_split.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_split.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_sppp.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_sppp.h
ng_tag.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_tag.h
ng_tcpmss.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_tcpmss.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_tee.c
ng_tee.h
ng_tty.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_tty.h
ng_UI.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_UI.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_vjc.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_vjc.h
ng_vlan.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ng_vlan.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
NOTES