Date: Mon, 23 Aug 2021 19:37:15 GMT From: Kristof Provost <kp@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 159258afb50a - main - altq: Fix panics on rmc_restart() Message-ID: <202108231937.17NJbFjt086603@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=159258afb50ad57f7ed27fe86ded83a7b3a26f90 commit 159258afb50ad57f7ed27fe86ded83a7b3a26f90 Author: Kristof Provost <kp@FreeBSD.org> AuthorDate: 2021-08-21 11:42:27 +0000 Commit: Kristof Provost <kp@FreeBSD.org> CommitDate: 2021-08-23 19:35:41 +0000 altq: Fix panics on rmc_restart() rmc_restart() is called from a timer, but can trigger traffic. This means the curvnet context will not be set. Use the vnet associated with the interface we're currently processing to set it. We also have to enter net_epoch here, for the same reason. Reviewed by: mjg MFC after: 1 week Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D31642 --- sys/net/altq/altq_rmclass.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/net/altq/altq_rmclass.c b/sys/net/altq/altq_rmclass.c index a6ede6feebe2..a9af314cd48a 100644 --- a/sys/net/altq/altq_rmclass.c +++ b/sys/net/altq/altq_rmclass.c @@ -1554,10 +1554,13 @@ rmc_restart(void *arg) { struct rm_class *cl = arg; struct rm_ifdat *ifd = cl->ifdat_; + struct epoch_tracker et; int s; s = splnet(); + NET_EPOCH_ENTER(et); IFQ_LOCK(ifd->ifq_); + CURVNET_SET(ifd->ifq_->altq_ifp->if_vnet); if (cl->sleeping_) { cl->sleeping_ = 0; cl->undertime_.tv_sec = 0; @@ -1567,7 +1570,9 @@ rmc_restart(void *arg) (ifd->restart)(ifd->ifq_); } } + CURVNET_RESTORE(); IFQ_UNLOCK(ifd->ifq_); + NET_EPOCH_EXIT(et); splx(s); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108231937.17NJbFjt086603>