High · published October 22, 2024
In the Linux kernel, the following vulnerability has been resolved:
net: do not delay dst_entries_add() in dst_release()
dst_entries_add() uses per-cpu data that might be freed at netns
dismantle from ip6_route_net_exit() calling dst_entries_destroy()
Before ip6_route_net_exit() can be called, we release all
the dsts associated with this netns, via calls to dst_release(),
which waits an rcu grace period before calling dst_destroy()
dst_entries_add() use in dst_destroy() is racy, because
dst_entries_destroy() could have been called already.
Decrementing the number of dsts must happen sooner.
Notes:
1) in CONFIG_XFRM case, dst_destroy() can call
dst_release_immediate(child), this might also cause UAF
if the child does not have DST_NOCOUNT set.
IPSEC maintainers might take a look and see how to address this.
2) There is also discussion about removing this count of dst,
which might happen in future kernels.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 3.10.50, < 3.11 | 3.11 |
| linux/linux_kernel | ≥ 3.12.26, < 3.13 | 3.13 |
| linux/linux_kernel | ≥ 3.14.14, < 3.15 | 3.15 |
| linux/linux_kernel | ≥ 3.15.7, < 3.16 | 3.16 |
| linux/linux_kernel | ≥ 3.16, < 6.6.57 | 6.6.57 |
| linux/linux_kernel | ≥ 6.7, < 6.11.4 | 6.11.4 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |