Messages in this thread Patch in this message | | | From | Kuniyuki Iwashima <> | Subject | [PATCH v1 net 09/15] ratelimit: Fix data-races in ___ratelimit(). | Date | Mon, 15 Aug 2022 22:23:41 -0700 |
| |
While reading rs->interval and rs->burst, they can be changed concurrently. Thus, we need to add READ_ONCE() to their readers.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> --- lib/ratelimit.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/ratelimit.c b/lib/ratelimit.c index e01a93f46f83..b59a1d3d0cc3 100644 --- a/lib/ratelimit.c +++ b/lib/ratelimit.c @@ -26,10 +26,12 @@ */ int ___ratelimit(struct ratelimit_state *rs, const char *func) { + int interval = READ_ONCE(rs->interval); + int burst = READ_ONCE(rs->burst); unsigned long flags; int ret; - if (!rs->interval) + if (!interval) return 1; /* @@ -44,7 +46,7 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func) if (!rs->begin) rs->begin = jiffies; - if (time_is_before_jiffies(rs->begin + rs->interval)) { + if (time_is_before_jiffies(rs->begin + interval)) { if (rs->missed) { if (!(rs->flags & RATELIMIT_MSG_ON_RELEASE)) { printk_deferred(KERN_WARNING @@ -56,7 +58,7 @@ int ___ratelimit(struct ratelimit_state *rs, const char *func) rs->begin = jiffies; rs->printed = 0; } - if (rs->burst && rs->burst > rs->printed) { + if (burst && burst > rs->printed) { rs->printed++; ret = 1; } else { -- 2.30.2
| |