In the Linux kernel, the following vulnerability has been resolved:
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.
| Software | From | Fixed in |
|---|---|---|
| linux / linux_kernel | 6.1.128 | 6.1.148 |
| linux / linux_kernel | 6.6.75 | 6.6.102 |
| linux / linux_kernel | 6.11.11 | 6.12 |
| linux / linux_kernel | 6.12.2 | 6.12.42 |
| linux / linux_kernel | 6.13 | 6.15.10 |
| linux / linux_kernel | 6.16 | 6.16.1 |
| debian / debian_linux | 11.0 | 11.0.x |