diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-06-19 15:27:52 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-06-19 15:27:52 +0200 |
commit | 894ddae0948f2f6e55681e3d98cb1b8f1257ad8f (patch) | |
tree | 949b3b47cdb9e4c661e8560a37be7a8edcac16e3 | |
parent | receive: drop handshake packets if rng is not initialized (diff) | |
download | wireguard-monolithic-historical-894ddae0948f2f6e55681e3d98cb1b8f1257ad8f.tar.xz wireguard-monolithic-historical-894ddae0948f2f6e55681e3d98cb1b8f1257ad8f.zip |
ratelimiter: mitigate reference underflow
-rw-r--r-- | src/ratelimiter.c | 2 | ||||
-rw-r--r-- | src/selftest/ratelimiter.h | 2 |
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"); |