aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatt Dunwoodie <ncon@noconroy.net>2021-04-23 13:44:13 +1000
committerMatt Dunwoodie <ncon@noconroy.net>2021-04-23 14:33:30 +1000
commit8f31763ff3b48173c3f1cacfa9a82abc68dca7a7 (patch)
treee55cf49a7c2132e106df89e8dd084b379a70a37b /src
parentif_wg: set snd_tag to NULL after releasing (diff)
downloadwireguard-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.c24
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;