From nobody Mon Apr 13 14:43:24 2026 X-Original-To: dev-commits-src-branches@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 4fvVWx24Fxz6ZGjS for ; Mon, 13 Apr 2026 14:43:25 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fvVWx0Vcvz3v6G for ; Mon, 13 Apr 2026 14:43:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776091405; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8XkHks80KXO/siDy2wXfLgw52VytXEgWUOM5N1vWYq0=; b=qrS2x1TvLqTV2WZoLlxZ1tx8F0paIxb9EhuFORCM75g/yW7Oyfa9HcDIUCd6phwn7rbZ3x d+Rd1bQHL2nCQq0myfJiT8V6hoE9g+C6I3P8yT8VD5JywqmOPk8fPbo/sxIBJnBC+ERiIT 4ERUoDhRnqsyMirfEbHhBBYNf7WRlBpOVsW5wn5s28UQoHegr5iQJlcCpqlQg6Ut3Lu8DK E1HN+HGXykiUae09u7zDuKEZbgXud0usHTa+JO26s4kaIJ8yUYyjkyIHMPWiyfN41GOTOM TW/mu4WBEkdhm3CCZMgDC9LOBBZ1pdvD0pXQIZUDdc5FWT0RKTHEr0Zkp3q8IA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776091405; a=rsa-sha256; cv=none; b=vWjTMbR8VFFjtMY//YiYCfBLonPz904AR7X7HIZ14Z+gppJ8FMOJs/O4X9NClz9r4PcLC1 zn/AzPugbS0/qNNjLuKfXp01zcNC4sfTzjgDMelgIa6QOAcejaoCm7lFPnlxRv4/0mKP5g mlmd3DzRRUcJh3O3LEL/HBzliaDOk6uTFvPjk0a01YRtbmUyzCkpUZviob2Rd12/KStvj9 +DNdM1fnjns1fay7i5p2xeqWAFoYcHt4vVmd4V2wUkENUiAKeS1pR9B8AwQkEdUZx723AE IjIeHslgkepa2CZx4xepsq7LdPBkzugUh1Xed9mr9YlhohtuYSiQi9srVrfP8A== 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=1776091405; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8XkHks80KXO/siDy2wXfLgw52VytXEgWUOM5N1vWYq0=; b=Mad0T53UHVEAyJIl3Yrah5azAkKwcatCx9l+k4dmJO1ibCR/+wqvrlHXCQ5HNgkzqz/vV7 h3Vtujg6bkv9VF8Kgvb5NSEunXFRYit/X50any5WaRRy0pfwzz997hJDoReAin3aXcmUie QIqE9rPnufSb1bVQyaGXn4y0MocSkDhvEeFBOUp8Y1b/j/nKq4ZrcngKm/V9neCdNdHnEX TbI/pnxKTiE7Fy70RIeScEXAf263jgrPVry3HjQ5oV4NRiYveN+3+aaVjGGkF/Nby3NoZB FqAdWOV8cCgHIXV5Sd42pAtXFgJdz986wD+bJrYSZ7wPNpWpIVimSL3zjJhdqg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fvVWw6QHlz16lM for ; Mon, 13 Apr 2026 14:43:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1a108 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 13 Apr 2026 14:43:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kyle Evans Subject: git: 42a8f973cb90 - stable/14 - kqueue: compare against the size in kqueue_expand List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 42a8f973cb90fa40025586f083e7b13db7f81926 Auto-Submitted: auto-generated Date: Mon, 13 Apr 2026 14:43:24 +0000 Message-Id: <69dd010c.1a108.349f32ce@gitrepo.freebsd.org> The branch stable/14 has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=42a8f973cb90fa40025586f083e7b13db7f81926 commit 42a8f973cb90fa40025586f083e7b13db7f81926 Author: Kyle Evans AuthorDate: 2026-04-01 22:30:48 +0000 Commit: Kyle Evans CommitDate: 2026-04-13 14:43:16 +0000 kqueue: compare against the size in kqueue_expand This is a cosmetic change, rather than a functional one: comparing the knlistsize against the fd requires a little bit of mental gymnastics to confirm that this is fine and not doing unnecessary work in some cases. Notably, one must consider that kq_knlistsize only grows in KQEXTENT chunks, which means that concurrent threads trying to grow the kqueue to consecutive fds will usually not result in the list being replaced twice. One can also more clearly rule out classes of arithmetic problems in the final `else` branch. Reviewed by: kib, markj (cherry picked from commit 0b4f0e0515d0c7ec855cd654ae5dc562f4931cae) --- sys/kern/kern_event.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index a8e59ff408a4..3df1ed5565d2 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -1859,10 +1859,11 @@ kqueue_expand(struct kqueue *kq, const struct filterops *fops, uintptr_t ident, to_free = NULL; if (fops->f_isfd) { fd = ident; - if (kq->kq_knlistsize <= fd) { - size = kq->kq_knlistsize; - while (size <= fd) + size = atomic_load_int(&kq->kq_knlistsize); + if (size <= fd) { + do { size += KQEXTENT; + } while (size <= fd); list = malloc(size * sizeof(*list), M_KQUEUE, mflag); if (list == NULL) return ENOMEM; @@ -1870,7 +1871,7 @@ kqueue_expand(struct kqueue *kq, const struct filterops *fops, uintptr_t ident, if ((kq->kq_state & KQ_CLOSING) != 0) { to_free = list; error = EBADF; - } else if (kq->kq_knlistsize > fd) { + } else if (kq->kq_knlistsize >= size) { to_free = list; } else { if (kq->kq_knlist != NULL) { @@ -1885,6 +1886,7 @@ kqueue_expand(struct kqueue *kq, const struct filterops *fops, uintptr_t ident, kq->kq_knlistsize = size; kq->kq_knlist = list; } + MPASS(error != 0 || kq->kq_knlistsize > fd); KQ_UNLOCK(kq); } } else {