mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 07:04:24 +00:00
inetpeer: Fix data-races around sysctl.
[ Upstream commit3d32edf1f3
] While reading inetpeer sysctl variables, they can be changed concurrently. So, we need to add READ_ONCE() to avoid data-races. Fixes:1da177e4c3
("Linux-2.6.12-rc2") 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
a3d742c6b5
commit
20243034dc
1 changed files with 8 additions and 4 deletions
|
@ -147,16 +147,20 @@ static void inet_peer_gc(struct inet_peer_base *base,
|
|||
struct inet_peer *gc_stack[],
|
||||
unsigned int gc_cnt)
|
||||
{
|
||||
int peer_threshold, peer_maxttl, peer_minttl;
|
||||
struct inet_peer *p;
|
||||
__u32 delta, ttl;
|
||||
int i;
|
||||
|
||||
if (base->total >= inet_peer_threshold)
|
||||
peer_threshold = READ_ONCE(inet_peer_threshold);
|
||||
peer_maxttl = READ_ONCE(inet_peer_maxttl);
|
||||
peer_minttl = READ_ONCE(inet_peer_minttl);
|
||||
|
||||
if (base->total >= peer_threshold)
|
||||
ttl = 0; /* be aggressive */
|
||||
else
|
||||
ttl = inet_peer_maxttl
|
||||
- (inet_peer_maxttl - inet_peer_minttl) / HZ *
|
||||
base->total / inet_peer_threshold * HZ;
|
||||
ttl = peer_maxttl - (peer_maxttl - peer_minttl) / HZ *
|
||||
base->total / peer_threshold * HZ;
|
||||
for (i = 0; i < gc_cnt; i++) {
|
||||
p = gc_stack[i];
|
||||
|
||||
|
|
Loading…
Reference in a new issue