mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-19 17:09:14 -05:00
ipv6: annotate data-races around sysctl.ip6_rt_gc_interval
Add READ_ONCE() on lockless reads of net->ipv6.sysctl.ip6_rt_gc_interval Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20260115094141.3124990-7-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
5ade47c974
commit
12eddc6857
@@ -1374,14 +1374,14 @@ static void fib6_start_gc(struct net *net, struct fib6_info *rt)
|
||||
if (!timer_pending(&net->ipv6.ip6_fib_timer) &&
|
||||
(rt->fib6_flags & RTF_EXPIRES))
|
||||
mod_timer(&net->ipv6.ip6_fib_timer,
|
||||
jiffies + net->ipv6.sysctl.ip6_rt_gc_interval);
|
||||
jiffies + READ_ONCE(net->ipv6.sysctl.ip6_rt_gc_interval));
|
||||
}
|
||||
|
||||
void fib6_force_start_gc(struct net *net)
|
||||
{
|
||||
if (!timer_pending(&net->ipv6.ip6_fib_timer))
|
||||
mod_timer(&net->ipv6.ip6_fib_timer,
|
||||
jiffies + net->ipv6.sysctl.ip6_rt_gc_interval);
|
||||
jiffies + READ_ONCE(net->ipv6.sysctl.ip6_rt_gc_interval));
|
||||
}
|
||||
|
||||
static void __fib6_update_sernum_upto_root(struct fib6_info *rt,
|
||||
@@ -2413,6 +2413,7 @@ static void fib6_gc_all(struct net *net, struct fib6_gc_args *gc_args)
|
||||
void fib6_run_gc(unsigned long expires, struct net *net, bool force)
|
||||
{
|
||||
struct fib6_gc_args gc_args;
|
||||
int ip6_rt_gc_interval;
|
||||
unsigned long now;
|
||||
|
||||
if (force) {
|
||||
@@ -2421,8 +2422,8 @@ void fib6_run_gc(unsigned long expires, struct net *net, bool force)
|
||||
mod_timer(&net->ipv6.ip6_fib_timer, jiffies + HZ);
|
||||
return;
|
||||
}
|
||||
gc_args.timeout = expires ? (int)expires :
|
||||
net->ipv6.sysctl.ip6_rt_gc_interval;
|
||||
ip6_rt_gc_interval = READ_ONCE(net->ipv6.sysctl.ip6_rt_gc_interval);
|
||||
gc_args.timeout = expires ? (int)expires : ip6_rt_gc_interval;
|
||||
gc_args.more = 0;
|
||||
|
||||
fib6_gc_all(net, &gc_args);
|
||||
@@ -2431,8 +2432,7 @@ void fib6_run_gc(unsigned long expires, struct net *net, bool force)
|
||||
|
||||
if (gc_args.more)
|
||||
mod_timer(&net->ipv6.ip6_fib_timer,
|
||||
round_jiffies(now
|
||||
+ net->ipv6.sysctl.ip6_rt_gc_interval));
|
||||
round_jiffies(now + ip6_rt_gc_interval));
|
||||
else
|
||||
timer_delete(&net->ipv6.ip6_fib_timer);
|
||||
spin_unlock_bh(&net->ipv6.fib6_gc_lock);
|
||||
|
||||
Reference in New Issue
Block a user