DF-0309 / fix.diff
diff --git a/sys/net/ip_mroute/ip_mroute.c b/sys/net/ip_mroute/ip_mroute.c --- a/sys/net/ip_mroute/ip_mroute.c +++ b/sys/net/ip_mroute/ip_mroute.c @@ -1253,6 +1253,13 @@ return ENOBUFS; } + /* + * XXX there is no global cap on the number of stalled (S, G) cache-miss + * entries: MAX_UPQ only bounds the per-flow upcall queue. A remote multicast + * flood of distinct flows can drive unbounded mbuf/kmalloc pressure while the + * mrouter token is held. The full fix needs a global stall-entry counter with + * eviction/backoff. + */ mb0 = m_copypacket(m, M_NOWAIT); if (mb0 && (M_HASCL(mb0) || mb0->m_len < hlen)) mb0 = m_pullup(mb0, hlen); |