mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-04 07:31:11 +00:00
if_gif: fix vnet shutdown panic
If an if_gif exists and has an address assigned inside a vnet when the
vnet is shut down we failed to clean up the address, leading to a panic
when we ip_destroy() and the V_in_ifaddrhashtbl is not empty.
This happens because of the VNET_SYS(UN)INIT order, which means we
destroy the if_gif interface before the addresses can be purged (and
if_detach() does not remove addresses, it assumes this will be done by
the stack teardown code).
Set subsystem SI_SUB_PSEUDO just like if_bridge so the cleanup
operations happen in the correct order.
MFC after: 3 weeks
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D32835
(cherry picked from commit 8ca6c11a7c
)
This commit is contained in:
parent
d364adc09c
commit
60c3b9a78a
|
@ -214,7 +214,7 @@ vnet_gif_init(const void *unused __unused)
|
|||
in6_gif_init();
|
||||
#endif
|
||||
}
|
||||
VNET_SYSINIT(vnet_gif_init, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY,
|
||||
VNET_SYSINIT(vnet_gif_init, SI_SUB_PSEUDO, SI_ORDER_ANY,
|
||||
vnet_gif_init, NULL);
|
||||
|
||||
static void
|
||||
|
@ -229,7 +229,7 @@ vnet_gif_uninit(const void *unused __unused)
|
|||
in6_gif_uninit();
|
||||
#endif
|
||||
}
|
||||
VNET_SYSUNINIT(vnet_gif_uninit, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY,
|
||||
VNET_SYSUNINIT(vnet_gif_uninit, SI_SUB_PSEUDO, SI_ORDER_ANY,
|
||||
vnet_gif_uninit, NULL);
|
||||
|
||||
static int
|
||||
|
|
Loading…
Reference in a new issue