mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 05:55:44 +02:00
icmp: Fix data-races around sysctl.
[ Upstream commit48d7ee321e] While reading icmp sysctl variables, they can be changed concurrently. So, we need to add READ_ONCE() to avoid data-races. Fixes:4cdf507d54("icmp: add a global rate limitation") Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
fe2a35fa2c
commit
e088ceb73c
|
|
@ -261,11 +261,12 @@ bool icmp_global_allow(void)
|
||||||
spin_lock(&icmp_global.lock);
|
spin_lock(&icmp_global.lock);
|
||||||
delta = min_t(u32, now - icmp_global.stamp, HZ);
|
delta = min_t(u32, now - icmp_global.stamp, HZ);
|
||||||
if (delta >= HZ / 50) {
|
if (delta >= HZ / 50) {
|
||||||
incr = sysctl_icmp_msgs_per_sec * delta / HZ ;
|
incr = READ_ONCE(sysctl_icmp_msgs_per_sec) * delta / HZ;
|
||||||
if (incr)
|
if (incr)
|
||||||
WRITE_ONCE(icmp_global.stamp, now);
|
WRITE_ONCE(icmp_global.stamp, now);
|
||||||
}
|
}
|
||||||
credit = min_t(u32, icmp_global.credit + incr, sysctl_icmp_msgs_burst);
|
credit = min_t(u32, icmp_global.credit + incr,
|
||||||
|
READ_ONCE(sysctl_icmp_msgs_burst));
|
||||||
if (credit) {
|
if (credit) {
|
||||||
/* We want to use a credit of one in average, but need to randomize
|
/* We want to use a credit of one in average, but need to randomize
|
||||||
* it for security reasons.
|
* it for security reasons.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user