diff options
author | Matt Dunwoodie <ncon@noconroy.net> | 2021-04-23 13:44:13 +1000 |
---|---|---|
committer | Matt Dunwoodie <ncon@noconroy.net> | 2021-04-23 14:33:30 +1000 |
commit | 8f31763ff3b48173c3f1cacfa9a82abc68dca7a7 (patch) | |
tree | e55cf49a7c2132e106df89e8dd084b379a70a37b /src | |
parent | if_wg: set snd_tag to NULL after releasing (diff) | |
download | wireguard-freebsd-8f31763ff3b48173c3f1cacfa9a82abc68dca7a7.tar.xz wireguard-freebsd-8f31763ff3b48173c3f1cacfa9a82abc68dca7a7.zip |
if_wg: check wg_module_init succeeded
Signed-off-by: Matt Dunwoodie <ncon@noconroy.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/if_wg.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/if_wg.c b/src/if_wg.c index 3039959..0e5ea3f 100644 --- a/src/if_wg.c +++ b/src/if_wg.c @@ -396,7 +396,7 @@ static void wg_init(void *); static int wg_ioctl(struct ifnet *, u_long, caddr_t); static void vnet_wg_init(const void *); static void vnet_wg_uninit(const void *); -static void wg_module_init(void); +static int wg_module_init(void); static void wg_module_deinit(void); /* TODO Peer */ @@ -2826,20 +2826,27 @@ static void wg_run_selftests(void) static inline void wg_run_selftests(void) { } #endif -static void +static int wg_module_init(void) { osd_method_t methods[PR_MAXMETHOD] = { [PR_METHOD_REMOVE] = wg_prison_remove, }; - wg_packet_zone = uma_zcreate("wg packet", sizeof(struct wg_packet), - NULL, NULL, NULL, NULL, 0, 0); - wg_osd_jail_slot = osd_jail_register(NULL, methods); - - cookie_init(); + if ((wg_packet_zone = uma_zcreate("wg packet", sizeof(struct wg_packet), + NULL, NULL, NULL, NULL, 0, 0)) == NULL) + goto free_none; + if (cookie_init() != 0) + goto free_zone; + wg_osd_jail_slot = osd_jail_register(NULL, methods); wg_run_selftests(); + return (0); + +free_zone: + uma_zdestroy(wg_packet_zone); +free_none: + return (ENOMEM); } static void @@ -2858,8 +2865,7 @@ wg_module_event_handler(module_t mod, int what, void *arg) { switch (what) { case MOD_LOAD: - wg_module_init(); - break; + return wg_module_init(); case MOD_UNLOAD: wg_module_deinit(); break; |