From nobody Mon Apr 7 01:29:10 2025 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 4ZWBSl10N7z5sNh0; Mon, 07 Apr 2025 01:29:11 +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 4ZWBSk2929z3wZV; Mon, 07 Apr 2025 01:29:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1743989350; 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=a7tD7fui+dPwWWd4mFgcYrOo9nKhvtati7yWzDyRyRk=; b=ePDyEYyeAyB0m8YiOpx9uqszp6ZuP36/SsCqqCrVo0UwxIC12YK5KzhVH83d5XLCyKa+j4 zAP/BUtGQynrG1Mzb0/2ymyLAfipynOy00uPqyAJxS4XAII/rxWCGP0s5TSEJzdvoRpaT6 jsrWVCICwn8yMOnObv9sMm8hwJGS68gl73W7lMlmm1Z5KvVBXpVJx+SESUZ4qp0E3ocnqG iEUaaIJ0hefIHN8dxxsLjTXkUA62OKP5eZtJri+nJFCrQYeotd/WJMddEh+rdf5j9jgNnf 1hj40wS1CPH+Mw7ksGYeoVsjaeyixCSgB+7NOaU2Sag+LehhM0x93+c5vHfy/A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1743989350; a=rsa-sha256; cv=none; b=A7TjYHfNKV34iRwJCl0/G4smpbD3kDqU8Soiy1DawEoYIWCTEwuIS6fXubt9oCVA7Ww9Tl yUwCUgj4qpVHcuR6+o6sGSXVNt9DP3BJ393pzrCBlPYWnLGDhzbdKlGQGb301q6JtcNPsh IdwEDFJAmjtq1RpSr/Ojw+tpiRluqxgNaEvaFp4irCi6J7ywQ+kby1546/9nS7WWy7a+B9 3x4Xj+uzf0fuSisFHMsSfZ2fbvDCJ2PWRUarsaxlkV2w6hhgPVc2EjDn4gX3ezF/GZ4NTC fPgI6xUMPi7CqXLACFbhXiKfhhYMDGD2rWZt30ZiQfkwjSGMCanhGTZCN8OrdA== 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=1743989350; 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=a7tD7fui+dPwWWd4mFgcYrOo9nKhvtati7yWzDyRyRk=; b=di2Rl+kCpx9J6QzmbnxTRKEfol8Oo6+NgLAAoi4H+pdVNN0QgUJOtJLv/oTVFVLPGPF+64 055xgtTYARcgwBl2p/d70cscEIhqcbxmdMKZUZ0FOa5PX22EOeYacfu2Ow+niiW9T1kJhg pT0QwRhkbwJGcxbZqbgEH0F/5lqsDGcrWXxvv7SF7B+y/VrgkM4PgNHWvRLzlOhVntQRzs WsBrf3pF5/ENy90tDBaqGdX84ysN+sIRuDa76SaPPPyvzeevWNKNQhkdBnncQp14hLn5ON 2npBdZuMhn9X3zt6INzki3of45/bcEorOKWa2GTNYkQQ1X9WEwUB7Spp0F16lA== 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 4ZWBSk1dK4z9fs; Mon, 07 Apr 2025 01:29:10 +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 5371TAcA063228; Mon, 7 Apr 2025 01:29:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5371TA9I063225; Mon, 7 Apr 2025 01:29:10 GMT (envelope-from git) Date: Mon, 7 Apr 2025 01:29:10 GMT Message-Id: <202504070129.5371TA9I063225@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 2170bf801d13 - stable/14 - sysctl KERN_PROC_KQUEUE: treat omitted kqfd as request to dump all kqueues 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: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 2170bf801d13549babf914cffde84b01f44ce604 Auto-Submitted: auto-generated The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=2170bf801d13549babf914cffde84b01f44ce604 commit 2170bf801d13549babf914cffde84b01f44ce604 Author: Konstantin Belousov AuthorDate: 2025-03-15 01:50:46 +0000 Commit: Konstantin Belousov CommitDate: 2025-04-07 01:28:22 +0000 sysctl KERN_PROC_KQUEUE: treat omitted kqfd as request to dump all kqueues (cherry picked from commit ab9b296498fe5809bbb905c320d46e700c267164) --- 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); }