From nobody Fri Aug 7 23:05:03 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hH09K1xC2z6nw9q for ; Fri, 07 Aug 2026 23:05:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hH09K11h0z3bsW for ; Fri, 07 Aug 2026 23:05:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786143909; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4VFkT0w4ZRzz0pX4G6oY+aEaoGwGX1hJ6IQfYMzYQ7g=; b=MTvw4pzB+7v42ZWDpw5ZqR9CBf4Hx88qZLIhPx7bp0xHCeM2XCUzokpc1/JEw9Yzg1lyIC KWN2UvOoPJOPq5JrwZRQAwP8rLrBhNqg6aFjMKBX5Nq6OsPP8ggWo53JJI5i18S/yL7rcb TqlLcKMXmr/DnxdFevHNQGrqu+gJ0tAKgPxq1ngWbC1MyOo2E2oaON5FrwXBFSFBDwpdw/ ol6KdqdOS1f5xBXu0fr3fh68+90zox28OHZHctNJEBucBwoRR/zWjwSqrPpzgBUQvuuO1d yBmB05gWdjAuy744O5B5mkpRB6RmaZelP/uayJpAi+dk3h7YOwqprkuZEdb68g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786143909; a=rsa-sha256; cv=none; b=fG8EuFowTJyB12arxRqr3bzsNsmZFFGRAnaNIaAgIfZcaZ1CxZcqovXM97cgOMDOmBDwh3 Az1CbplT5TkWEDnpe3lCWpZ8MnfU+TcoBMUF5ERZOiqE4dgGX0ZAytKlifNMlvICvOatby 2DGFEwp31jDR4tMISbXRKUTezQl5hW4fxhWitl1VocE0FvvCnLEDP9+iI/bHbuI3kzkXsI LvF0psvnS7u3IrAXirDy7tnHRvzSPQMXcCgh+RKFQZ+/lB+YE44LXCoJDxK+XOiub/FkLp Zm9j+wPufMwDIU0nwSRoJSD5pRY/LaPZAAasij9WY9/OHnGpaOealUURRSBjdQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786143909; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4VFkT0w4ZRzz0pX4G6oY+aEaoGwGX1hJ6IQfYMzYQ7g=; b=dQlnsyYVodJBBSkUttMO66TGxRYKcfrjRlL5pS6E2ZQqwMQ8AtqvE8K5JTbjHy4ZfgS5Zu XHyuqhXiOnoKvHqTxpeC65Y4Sy5gAqOzuwpbPtHDCQQvy0CPB71tp7th5PWVS00ULW6PDD A+JPbkLCbnxJfEvlbtAnCFsYX493mIOC7bJ/mEwAmEZ8uBqprKZrG8fv+Mn43VVla9TI87 xgyLLDYol70a/267eF7M7JkyBRp0a9Av+K4Oq9yEKEGYVYEF9RYQLCxwgNt4z9sE1ihby3 dpBCf9FlnlxvlY8setNuzNMjmpY5XUAHJw92E309T+YWm9ViTwSkhVekhjh+uw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hH09K05nnz1Qkg for ; Fri, 07 Aug 2026 23:05:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3628b by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 07 Aug 2026 23:05:03 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: 4c4bad4421fb - main - kqueue: avoid closing a file under the knlist lock List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4c4bad4421fb1a300178767f71215cc5f5e0bfb6 Auto-Submitted: auto-generated Date: Fri, 07 Aug 2026 23:05:03 +0000 Message-Id: <6a76649f.3628b.44c639c6@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=4c4bad4421fb1a300178767f71215cc5f5e0bfb6 commit 4c4bad4421fb1a300178767f71215cc5f5e0bfb6 Author: Abdelkader Boudih AuthorDate: 2026-08-07 22:57:07 +0000 Commit: Adrian Chadd CommitDate: 2026-08-07 22:57:11 +0000 kqueue: avoid closing a file under the knlist lock Killing a knote releases its file reference, and releasing the last one runs the close path inline. panic: _mtx_lock_sleep: recursed on non-recursive mutex ttymtx Revoking a controlling tty during exit reaches this whenever a knote is still registered on it. Released the knlist lock around the drop and restart the walk. The knote stays valid while the lock is released. MFC: 1 week Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58681 --- sys/kern/kern_event.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index 507451ce4492..734f8a408f4d 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -2793,6 +2793,7 @@ knlist_cleardel(struct knlist *knl, struct thread *td, int islocked, int killkn) { struct knote *kn, *kn2; struct kqueue *kq; + bool dropped; KASSERT(!knl->kl_autodestroy, ("cleardel for autodestroy %p", knl)); if (islocked) @@ -2809,6 +2810,7 @@ knlist_cleardel(struct knlist *knl, struct thread *td, int islocked, int killkn) * freed or converted to one-shot, as the attached subject is * essentially disappearing. */ + dropped = false; SLIST_FOREACH_SAFE(kn, &knl->kl_list, kn_selnext, kn2) { kq = kn->kn_kq; KQ_LOCK(kq); @@ -2820,7 +2822,11 @@ knlist_cleardel(struct knlist *knl, struct thread *td, int islocked, int killkn) if (killkn) { kn_enter_flux(kn); KQ_UNLOCK(kq); + knl->kl_unlock(knl->kl_lockarg); knote_drop_detached(kn, td); + knl->kl_lock(knl->kl_lockarg); + dropped = true; + break; } else { /* Make sure cleared knotes disappear soon */ kn->kn_flags |= EV_EOF | EV_ONESHOT; @@ -2828,6 +2834,8 @@ knlist_cleardel(struct knlist *knl, struct thread *td, int islocked, int killkn) } kq = NULL; } + if (dropped) + continue; if (SLIST_EMPTY(&knl->kl_list)) break;