From nobody Mon Mar 24 02:24:52 2025 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 4ZLcMS5bTFz5r9jP; Mon, 24 Mar 2025 02:24:52 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZLcMS3yW9z49fg; Mon, 24 Mar 2025 02:24:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1742783092; 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=4OMdTJQZpxdHviryQ6CKoz1J0cqmK74Oj8BbOX2Jblk=; b=fc7vVYQt8y9kbS07soNsJ3lgfZ3yt8SL1Zl6ceIO+jo55k9xyQhcMsj7c8cV1E+bKFslIU /ihRE4VBTjm0NJzWtHL4zQrQ9Mv1Xaq1zd0P02G1AkO6tm5wZr979nv0dqO4c+kui+qDP/ pbTIhFigJJhFixeUvqCE9kkG6XdEUKDHnf/QfaIyC+miLN6jpILnvyBDTSaFKQ4+fMAjOG 6Ndy0jD07oWugSt/2R4SdlSEoogebKFSwnBKMZMVwvneKVHJ6IMxJCBA+udkqU5Jdi53/F wSt0jY1Xxq4i9mDSuBZLMcAEzKqkLVLInLlxZS+HdbtTwl2HxRUjXObCMopeQg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1742783092; a=rsa-sha256; cv=none; b=LjmdFy+dGuEdArqL+MFBPYrqzWuUkk7cCsqlcorkb48Yny8tKHRtnhEaIKsLIsfc8liH7m AIvRG1nYHsLJ1dxQzL4SPU4cNzgiqUhrc/hz5QJ2fhoZpxY68S5aUuWtvNh/NU/JU05gzB AiQtiGwPN/+kdeEhLTpPfLRGtV7HjrX+vLlRwNrBdLXivBsbrHKeB3i4FWEzawdyjtsK+R +otwtQw8Ne1BeNLZ4SQ9CGekbRNH0XpNsoIFtir5r9mD5Rj8HwthaqayGDRBzQ7g0okHXE vQT75W01uWAVIsc0y0wbeB4JvLRhNm0jQYziSauhftyfOfiU6/gexEm3XTS9rg== 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=1742783092; 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=4OMdTJQZpxdHviryQ6CKoz1J0cqmK74Oj8BbOX2Jblk=; b=kga23RqgZsVGz8MhVcpvPdaoB9Le4hWYlZE3XtPBEhNrIPKt4uBbB33pQJhVKjupJI7Knh z/izQpE006nV+jaamko5TkjAnvBaPYNv/Pkh10LaqcWdt/yRVXqGhoq30Yex6BWyTzqSAa MxoWpw9BEhBXUlbW+rJUpOHj25+xGZYJbYxyf5I3KWEQoWUOKrl3EJyoMiZzqbNOyCSBzH m5ACwMM1ngMYMh+Awu+zR51dQqG170Oe1LatlG+yhz2dtsxuPKTGapdTHaFMKWGlFjV2/M vBK8ouXU/VJ2sA4Kul9I9QJDpY9dtiTFejZ87K5fR43Xk7chTJkPC4RtfPCDoQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZLcMS3TlJzbH4; Mon, 24 Mar 2025 02:24:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 52O2Oqpp069837; Mon, 24 Mar 2025 02:24:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 52O2Oq4U069834; Mon, 24 Mar 2025 02:24:52 GMT (envelope-from git) Date: Mon, 24 Mar 2025 02:24:52 GMT Message-Id: <202503240224.52O2Oq4U069834@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: ab9b296498fe - main - sysctl KERN_PROC_KQUEUE: treat omitted kqfd as request to dump all kqueues 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ab9b296498fe5809bbb905c320d46e700c267164 Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=ab9b296498fe5809bbb905c320d46e700c267164 commit ab9b296498fe5809bbb905c320d46e700c267164 Author: Konstantin Belousov AuthorDate: 2025-03-15 01:50:46 +0000 Commit: Konstantin Belousov CommitDate: 2025-03-24 02:24:14 +0000 sysctl KERN_PROC_KQUEUE: treat omitted kqfd as request to dump all kqueues Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D49372 --- sys/kern/kern_event.c | 64 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index 8188323bdbc9..e891cb7c094a 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -2964,8 +2964,6 @@ kern_proc_kqueues_out1(struct thread *td, struct proc *p, struct sbuf *s, { struct kern_proc_kqueues_out1_cb_args a; - MPASS(p == curproc); - a.s = s; a.compat32 = compat32; return (fget_remote_foreach(td, p, kern_proc_kqueues_out1_cb, &a)); @@ -2987,19 +2985,39 @@ kern_proc_kqueues_out(struct proc *p, struct sbuf *sb, size_t maxlen, return (error); } +static int +sysctl_kern_proc_kqueue_one(struct thread *td, struct sbuf *s, struct proc *p, + int kq_fd, bool compat32) +{ + struct file *fp; + struct kqueue *kq; + int error; + + error = fget_remote(td, p, kq_fd, &fp); + if (error == 0) { + if (fp->f_type != DTYPE_KQUEUE) { + error = EINVAL; + } else { + kq = fp->f_data; + error = kern_proc_kqueue_report(s, p, kq_fd, kq, + compat32); + } + fdrop(fp, td); + } + return (error); +} + static int sysctl_kern_proc_kqueue(SYSCTL_HANDLER_ARGS) { struct thread *td; struct proc *p; - struct file *fp; - struct kqueue *kq; struct sbuf *s, sm; - int error, error1, kq_fd, *name; + int error, error1, *name; bool compat32; name = (int *)arg1; - if ((u_int)arg2 != 2) + if ((u_int)arg2 > 2 || (u_int)arg2 == 0) return (EINVAL); error = pget((pid_t)name[0], PGET_HOLD | PGET_CANDEBUG, &p); @@ -3007,36 +3025,32 @@ sysctl_kern_proc_kqueue(SYSCTL_HANDLER_ARGS) return (error); td = curthread; - kq_fd = name[1]; - error = fget_remote(td, p, kq_fd, &fp); - if (error != 0) - goto out1; - if (fp->f_type != DTYPE_KQUEUE) { - error = EINVAL; - goto out2; - } +#ifdef FREEBSD_COMPAT32 + compat32 = SV_CURPROC_FLAG(SV_ILP32); +#else + compat32 = false; +#endif s = sbuf_new_for_sysctl(&sm, NULL, 0, req); if (s == NULL) { error = ENOMEM; - goto out2; + goto out; } sbuf_clear_flags(s, SBUF_INCLUDENUL); -#ifdef FREEBSD_COMPAT32 - compat32 = SV_CURPROC_FLAG(SV_ILP32); -#else - compat32 = false; -#endif - kq = fp->f_data; - error = kern_proc_kqueue_report(s, p, kq_fd, kq, compat32); + if ((u_int)arg2 == 1) { + error = kern_proc_kqueues_out1(td, p, s, compat32); + } else { + error = sysctl_kern_proc_kqueue_one(td, s, p, + name[1] /* kq_fd */, compat32); + } + error1 = sbuf_finish(s); if (error == 0) error = error1; sbuf_delete(s); -out2: - fdrop(fp, td); -out1: + +out: PRELE(p); return (error); }