diff options
| author | Gleb Smirnoff <glebius@FreeBSD.org> | 2026-01-23 22:18:18 +0000 |
|---|---|---|
| committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2026-01-23 22:18:18 +0000 |
| commit | f3de667137e90679cd20fa5c1dcd93a4c51ad848 (patch) | |
| tree | 7f5170a1a61598a90cecac27f92d46a9554f0515 /contrib/lutok/COPYING | |
| parent | cba9f88105c268f73fa2a92ca4479cc15b8a3338 (diff) | |
This is expected to fix the old in6_selecthlim() panics. The nature of
the panic is that a packet sending thread will obtain the struct ifnet
pointer locklessly and then pick the if_inet6 pointer from it and
dereference it. While the struct ifnet is freed via epoch_call(9), the
struct in6_ifextra until this change was not. For the forwarded packets,
or locally originated non-TCP packets we were probably safe due to the old
if_dead trick. But locally originated TCP packets may dereference
in6_ifextra via direct call into in6_selecthlim() from the tcp_output(),
before ip6_output().
NB: hypothetically a similar problem also applies to IPv4's if_inet pointer,
but there are no known panics, yet.
PR: 279653
Reviewed by: tuexen
Differential Revision: https://reviews.freebsd.org/D54728
Diffstat (limited to 'contrib/lutok/COPYING')
0 files changed, 0 insertions, 0 deletions
