aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-06-19 15:27:52 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-06-19 15:27:52 +0200
commit894ddae0948f2f6e55681e3d98cb1b8f1257ad8f (patch)
tree949b3b47cdb9e4c661e8560a37be7a8edcac16e3
parentreceive: drop handshake packets if rng is not initialized (diff)
downloadwireguard-monolithic-historical-894ddae0948f2f6e55681e3d98cb1b8f1257ad8f.tar.xz
wireguard-monolithic-historical-894ddae0948f2f6e55681e3d98cb1b8f1257ad8f.zip
ratelimiter: mitigate reference underflow
-rw-r--r--src/ratelimiter.c2
-rw-r--r--src/selftest/ratelimiter.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/src/ratelimiter.c b/src/ratelimiter.c
index 78096cc..2107c8e 100644
--- a/src/ratelimiter.c
+++ b/src/ratelimiter.c
@@ -183,7 +183,7 @@ err:
void ratelimiter_uninit(void)
{
- if (atomic64_dec_return(&refcnt))
+ if (atomic64_dec_if_positive(&refcnt))
return;
cancel_delayed_work_sync(&gc_work);
diff --git a/src/selftest/ratelimiter.h b/src/selftest/ratelimiter.h
index 7e017ce..0bdff1e 100644
--- a/src/selftest/ratelimiter.h
+++ b/src/selftest/ratelimiter.h
@@ -146,6 +146,8 @@ err_nofree:
ratelimiter_uninit();
ratelimiter_uninit();
ratelimiter_uninit();
+ /* Uninit one extra time to check underflow detection. */
+ ratelimiter_uninit();
out:
if (ret)
pr_info("ratelimiter self-tests: pass\n");