lkml.org 
[lkml]   [2022]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 076/231] inetpeer: Fix data-races around sysctl.
    Date
    From: Kuniyuki Iwashima <kuniyu@amazon.com>

    [ Upstream commit 3d32edf1f3c38d3301f6434e56316f293466d7fb ]

    While reading inetpeer sysctl variables, they can be changed
    concurrently. So, we need to add READ_ONCE() to avoid data-races.

    Fixes: 1da177e4c3f4 ("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>
    ---
    net/ipv4/inetpeer.c | 12 ++++++++----
    1 file changed, 8 insertions(+), 4 deletions(-)

    diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
    index da21dfce24d7..e9fed83e9b3c 100644
    --- a/net/ipv4/inetpeer.c
    +++ b/net/ipv4/inetpeer.c
    @@ -141,16 +141,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];

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-07-19 14:56    [W:4.057 / U:0.688 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site