diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2026-04-17 12:42:54 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2026-04-17 12:42:54 +0000 |
| commit | c1b514c88c76a4de906775d47b06388e62ab6845 (patch) | |
| tree | af96b0a3931c40ada028cf63fe3a810f089aa5d4 | |
| parent | 3c9cd6e4dc59202f2b150a5456541629b633af3b (diff) | |
in_mcast: Avoid calling sysctl_wire_old_buffer() in an epoch section
Wiring a virtual address range may require the thread to sleep, and this
is not permitted in an epoch section.
MFC after: 1 week
| -rw-r--r-- | sys/netinet/in_mcast.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/sys/netinet/in_mcast.c b/sys/netinet/in_mcast.c index 9e93992f81e0..1e7985ac01d7 100644 --- a/sys/netinet/in_mcast.c +++ b/sys/netinet/in_mcast.c @@ -2853,6 +2853,11 @@ sysctl_ip_mcast_filters(SYSCTL_HANDLER_ARGS) return (EINVAL); } + retval = sysctl_wire_old_buffer(req, + sizeof(uint32_t) + (in_mcast_maxgrpsrc * sizeof(struct in_addr))); + if (retval) + return (retval); + ifindex = name[0]; NET_EPOCH_ENTER(et); ifp = ifnet_byindex(ifindex); @@ -2863,13 +2868,6 @@ sysctl_ip_mcast_filters(SYSCTL_HANDLER_ARGS) return (ENOENT); } - retval = sysctl_wire_old_buffer(req, - sizeof(uint32_t) + (in_mcast_maxgrpsrc * sizeof(struct in_addr))); - if (retval) { - NET_EPOCH_EXIT(et); - return (retval); - } - IN_MULTI_LIST_LOCK(); CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { |
