From 894ddae0948f2f6e55681e3d98cb1b8f1257ad8f Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 19 Jun 2018 15:27:52 +0200 Subject: ratelimiter: mitigate reference underflow --- src/ratelimiter.c | 2 +- src/selftest/ratelimiter.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) 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"); -- cgit v1.2.3-59-g8ed1b