Commit 54e6fe9
ipv6: prevent infinite loop in rt6_nlmsg_size()
While testing prior patch, I was able to trigger
an infinite loop in rt6_nlmsg_size() in the following place:
list_for_each_entry_rcu(sibling, &f6i->fib6_siblings,
fib6_siblings) {
rt6_nh_nlmsg_size(sibling->fib6_nh, &nexthop_len);
}
This is because fib6_del_route() and fib6_add_rt2node()
uses list_del_rcu(), which can confuse rcu readers,
because they might no longer see the head of the list.
Restart the loop if f6i->fib6_nsiblings is zero.
Fixes: d9ccb18 ("ipv6: Fix soft lockups in fib6_select_path under high next hop churn")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250725140725.3626540-3-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>1 parent ea2f921 commit 54e6fe9
2 files changed
Lines changed: 20 additions & 18 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1265 | 1265 | | |
1266 | 1266 | | |
1267 | 1267 | | |
1268 | | - | |
| 1268 | + | |
1269 | 1269 | | |
1270 | 1270 | | |
1271 | 1271 | | |
| |||
2015 | 2015 | | |
2016 | 2016 | | |
2017 | 2017 | | |
2018 | | - | |
| 2018 | + | |
2019 | 2019 | | |
2020 | 2020 | | |
2021 | 2021 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5670 | 5670 | | |
5671 | 5671 | | |
5672 | 5672 | | |
| 5673 | + | |
| 5674 | + | |
5673 | 5675 | | |
5674 | 5676 | | |
5675 | 5677 | | |
5676 | 5678 | | |
5677 | 5679 | | |
5678 | 5680 | | |
5679 | | - | |
5680 | | - | |
5681 | | - | |
5682 | | - | |
5683 | | - | |
5684 | | - | |
5685 | | - | |
5686 | | - | |
5687 | | - | |
| 5681 | + | |
| 5682 | + | |
5688 | 5683 | | |
5689 | | - | |
5690 | | - | |
5691 | | - | |
5692 | | - | |
| 5684 | + | |
| 5685 | + | |
| 5686 | + | |
| 5687 | + | |
| 5688 | + | |
| 5689 | + | |
5693 | 5690 | | |
5694 | | - | |
| 5691 | + | |
| 5692 | + | |
| 5693 | + | |
| 5694 | + | |
| 5695 | + | |
5695 | 5696 | | |
5696 | | - | |
5697 | 5697 | | |
5698 | | - | |
| 5698 | + | |
| 5699 | + | |
| 5700 | + | |
5699 | 5701 | | |
5700 | 5702 | | |
5701 | 5703 | | |
| |||
0 commit comments