Skip to content

Commit 17d7a9d

Browse files
q2venRezaT4795
authored andcommitted
ipv4: Fix data-races around sysctl_fib_notify_on_flag_change.
[ Upstream commit 96b9bd8c6d125490f9adfb57d387ef81a55a103e ] While reading sysctl_fib_notify_on_flag_change, it can be changed concurrently. Thus, we need to add READ_ONCE() to its readers. Fixes: 680aea0 ("net: ipv4: Emit notification when fib hardware flags are changed") 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>
1 parent 991b495 commit 17d7a9d

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

net/ipv4/fib_trie.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,7 @@ fib_find_matching_alias(struct net *net, const struct fib_rt_info *fri)
10371037

10381038
void fib_alias_hw_flags_set(struct net *net, const struct fib_rt_info *fri)
10391039
{
1040+
u8 fib_notify_on_flag_change;
10401041
struct fib_alias *fa_match;
10411042
struct sk_buff *skb;
10421043
int err;
@@ -1058,14 +1059,16 @@ void fib_alias_hw_flags_set(struct net *net, const struct fib_rt_info *fri)
10581059
WRITE_ONCE(fa_match->offload, fri->offload);
10591060
WRITE_ONCE(fa_match->trap, fri->trap);
10601061

1062+
fib_notify_on_flag_change = READ_ONCE(net->ipv4.sysctl_fib_notify_on_flag_change);
1063+
10611064
/* 2 means send notifications only if offload_failed was changed. */
1062-
if (net->ipv4.sysctl_fib_notify_on_flag_change == 2 &&
1065+
if (fib_notify_on_flag_change == 2 &&
10631066
READ_ONCE(fa_match->offload_failed) == fri->offload_failed)
10641067
goto out;
10651068

10661069
WRITE_ONCE(fa_match->offload_failed, fri->offload_failed);
10671070

1068-
if (!net->ipv4.sysctl_fib_notify_on_flag_change)
1071+
if (!fib_notify_on_flag_change)
10691072
goto out;
10701073

10711074
skb = nlmsg_new(fib_nlmsg_size(fa_match->fa_info), GFP_ATOMIC);

0 commit comments

Comments
 (0)