Date: Thu, 20 Nov 2025 00:55:17 +0000 From: Andrew Gallatin <gallatin@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 896dc30bc9bc - main - iflib: fix iflib_simple_transmit() when interface is down Message-ID: <691e66f5.26a3d.4434d57f@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by gallatin: URL: https://cgit.FreeBSD.org/src/commit/?id=896dc30bc9bc2f7407b04ca4c08f88b1c7bf9d60 commit 896dc30bc9bc2f7407b04ca4c08f88b1c7bf9d60 Author: Andrew Gallatin <gallatin@FreeBSD.org> AuthorDate: 2025-11-20 00:48:56 +0000 Commit: Andrew Gallatin <gallatin@FreeBSD.org> CommitDate: 2025-11-20 00:48:56 +0000 iflib: fix iflib_simple_transmit() when interface is down Use the same check as iflib_if_transmit() to detect when the interface is down and return the proper error code, and also free the mbuf. This fixes an mbuf leak when a member of a lagg is brought down (and probably many other scenarios). Sponsored by: Netflix --- sys/net/iflib.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sys/net/iflib.c b/sys/net/iflib.c index ad2be119da7c..3181bdbcb849 100644 --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -7188,9 +7188,13 @@ iflib_simple_transmit(if_t ifp, struct mbuf *m) ctx = if_getsoftc(ifp); - if ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != - IFF_DRV_RUNNING) - return (EBUSY); + if (__predict_false((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0 + || !LINK_ACTIVE(ctx))) { + DBG_COUNTER_INC(tx_frees); + m_freem(m); + return (ENETDOWN); + } + txq = iflib_simple_select_queue(ctx, m); mtx_lock(&txq->ift_mtx); error = iflib_encap(txq, &m);help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?691e66f5.26a3d.4434d57f>
