Date: Fri, 07 Aug 2026 16:30:36 +0000 From: Mark Johnston <markj@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 6de818285f06 - main - netmap: Fix a race in kqueue registration Message-ID: <6a76082c.2135f.7ec41a03@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=6de818285f066c6705816674c671761dc09bff90 commit 6de818285f066c6705816674c671761dc09bff90 Author: Mark Johnston <markj@FreeBSD.org> AuthorDate: 2026-08-07 14:47:06 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2026-08-07 16:30:24 +0000 netmap: Fix a race in kqueue registration We need to acquire the netmap global lock earlier, to avoid racing with the NETMAP_REQ_REGISTER ioctl handler. Reported by: syzkaller Reviewed by: vmaffione MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58677 --- sys/dev/netmap/netmap_freebsd.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sys/dev/netmap/netmap_freebsd.c b/sys/dev/netmap/netmap_freebsd.c index 2241bfc970a6..409b273e6442 100644 --- a/sys/dev/netmap/netmap_freebsd.c +++ b/sys/dev/netmap/netmap_freebsd.c @@ -1452,24 +1452,24 @@ netmap_kqfilter(struct cdev *dev, struct knote *kn) if (ev != EVFILT_READ && ev != EVFILT_WRITE) { nm_prerr("bad filter request %d", ev); - return 1; + return EINVAL; } error = devfs_get_cdevpriv((void**)&priv); if (error) { nm_prerr("device not yet setup"); - return 1; + return error; } + NMG_LOCK(); na = priv->np_na; if (na == NULL) { + NMG_UNLOCK(); nm_prerr("no netmap adapter for this file descriptor"); - return 1; + return ENOENT; } /* the si is indicated in the priv */ si = priv->np_si[(ev == EVFILT_WRITE) ? NR_TX : NR_RX]; - kn->kn_fop = (ev == EVFILT_WRITE) ? - &netmap_wfiltops : &netmap_rfiltops; + kn->kn_fop = (ev == EVFILT_WRITE) ? &netmap_wfiltops : &netmap_rfiltops; kn->kn_hook = priv; - NMG_LOCK(); si->kqueue_users++; nm_prinf("kqueue users for %s: %d", si->mtxname, si->kqueue_users); NMG_UNLOCK();home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a76082c.2135f.7ec41a03>
