if_wg: destroy interfaces before uma zone
Fixes: #12 0xffffffff80f20105 in uma_zalloc_arg (zone=<optimized out>, udata=<optimized out>, udata@entry=0x0, flags=flags@entry=257) at /usr/src/sys/vm/uma_core.c:3420 #13 0xffffffff82922844 in uma_zalloc (zone=<unavailable>, flags=257) at /usr/src/sys/vm/uma.h:358 #14 wg_packet_alloc (m=0xfffff801154bfa00) at if_wg.c:1769 #15 wg_send_keepalive (peer=0xfffff800075dd000, peer@entry=<error reading variable: value is not available>) at if_wg.c:1291 Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
31d3186a6d
commit
47f0fccb86
17
src/if_wg.c
17
src/if_wg.c
|
@ -2948,7 +2948,8 @@ VNET_SYSINIT(vnet_wg_init, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY,
|
|||
static void
|
||||
vnet_wg_uninit(const void *unused __unused)
|
||||
{
|
||||
if_clone_detach(V_wg_cloner);
|
||||
if (V_wg_cloner)
|
||||
if_clone_detach(V_wg_cloner);
|
||||
}
|
||||
VNET_SYSUNINIT(vnet_wg_uninit, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY,
|
||||
vnet_wg_uninit, NULL);
|
||||
|
@ -3021,10 +3022,18 @@ free_none:
|
|||
static void
|
||||
wg_module_deinit(void)
|
||||
{
|
||||
uma_zdestroy(wg_packet_zone);
|
||||
VNET_ITERATOR_DECL(vnet_iter);
|
||||
VNET_LIST_RLOCK();
|
||||
VNET_FOREACH(vnet_iter) {
|
||||
if_clone_detach(VNET_VNET(vnet_iter, wg_cloner));
|
||||
VNET_VNET(vnet_iter, wg_cloner) = NULL;
|
||||
}
|
||||
VNET_LIST_RUNLOCK();
|
||||
NET_EPOCH_WAIT();
|
||||
MPASS(LIST_EMPTY(&wg_list));
|
||||
osd_jail_deregister(wg_osd_jail_slot);
|
||||
cookie_deinit();
|
||||
MPASS(LIST_EMPTY(&wg_list));
|
||||
uma_zdestroy(wg_packet_zone);
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -3043,7 +3052,7 @@ wg_module_event_handler(module_t mod, int what, void *arg)
|
|||
}
|
||||
|
||||
static moduledata_t wg_moduledata = {
|
||||
"wg",
|
||||
wgname,
|
||||
wg_module_event_handler,
|
||||
NULL
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue