From e1f203488cc652bbb6b062bf1eb454982e95cca6 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 25 Nov 2016 21:14:50 +0100 Subject: ratelimiter: load hashlimit at modinsert time This fixes a potential race with net_lock and rtnl_lock. --- src/main.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index 3102408..cd8c591 100644 --- a/src/main.c +++ b/src/main.c @@ -16,7 +16,7 @@ static int __init mod_init(void) { - int ret = 0; + int ret; #ifdef DEBUG if (!routing_table_selftest() || @@ -30,22 +30,31 @@ static int __init mod_init(void) chacha20poly1305_init(); noise_init(); + ret = ratelimiter_module_init(); + if (ret < 0) + goto out; + #ifdef CONFIG_WIREGUARD_PARALLEL ret = packet_init_data_caches(); if (ret < 0) - return ret; + goto err_packet; #endif ret = device_init(); - if (ret < 0) { -#ifdef CONFIG_WIREGUARD_PARALLEL - packet_deinit_data_caches(); -#endif - return ret; - } + if (ret < 0) + goto err_device; pr_info("WireGuard " WIREGUARD_VERSION " loaded. See www.wireguard.io for information.\n"); pr_info("Copyright (C) 2015-2016 Jason A. Donenfeld . All Rights Reserved.\n"); + + goto out; +err_device: +#ifdef CONFIG_WIREGUARD_PARALLEL + packet_deinit_data_caches(); +#endif +err_packet: + ratelimiter_module_deinit(); +out: return ret; } @@ -55,6 +64,7 @@ static void __exit mod_exit(void) #ifdef CONFIG_WIREGUARD_PARALLEL packet_deinit_data_caches(); #endif + ratelimiter_module_deinit(); pr_debug("WireGuard has been unloaded\n"); } -- cgit v1.2.3-59-g8ed1b