mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02:00
netfilter: nft_fib_ipv6: walk fib6_siblings under RCU
nft_fib6_info_nh_uses_dev() runs from nft_fib6_eval() in softirq under
rcu_read_lock(). fib6_siblings is modified by writers that hold
tb6_lock but do not wait for RCU readers, so the sibling walk should
use list_for_each_entry_rcu(): it adds READ_ONCE() on the ->next
pointer and lets CONFIG_PROVE_RCU_LIST validate the locking.
No functional change for non-debug builds.
Fixes: 1c32b24c23 ("netfilter: nft_fib_ipv6: switch to fib6_lookup")
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
parent
f438d1786d
commit
1d001b0a61
|
|
@ -170,7 +170,7 @@ static bool nft_fib6_info_nh_uses_dev(struct fib6_info *rt,
|
|||
if (nft_fib6_info_nh_dev_match(nh_dev, dev))
|
||||
return true;
|
||||
|
||||
list_for_each_entry(iter, &rt->fib6_siblings, fib6_siblings) {
|
||||
list_for_each_entry_rcu(iter, &rt->fib6_siblings, fib6_siblings) {
|
||||
nh_dev = fib6_info_nh_dev(iter);
|
||||
|
||||
if (nft_fib6_info_nh_dev_match(nh_dev, dev))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user