From nobody Mon Apr 7 01:29:08 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 4ZWBSj5gKwz5sNgw; Mon, 07 Apr 2025 01:29: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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZWBSj2VRGz3wlf; Mon, 07 Apr 2025 01:29:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1743989349; 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=mUTp/JYg4OgekTiRHzbAQA0UORn7goYINWvgX1VcpEw=; b=fCM8lf9DMdLklLQrPpC5D1N7eaHW6yGXme/sQt+Wh38D5GuNJiJNOVBwP9vWB43bFryXs7 bAis702WJu6xJKrhxP1y9lyoNn4/sa+zSm3Mu79hyZyuzepx50dJpLZnTmISVVYbjDE+OY l3sHjDVi5iDv3A/VxiyI7I74R2V6Ka+JovVrNYWLc1ZpedlwL3OKNR4AzzKfnUo620sWVT DW9TRgIqUq84pUSfKZ0TSRiTzvZBvPiSky8Y8Xgqk8yf89oBwayNqlfgKIaU0OqZ8ol5ZU bT4dtJYK22vyWqxcrouMapBek4PQFt4E6VomNYzSHhC0IrrjJT3+r9NCJtBPkg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1743989349; a=rsa-sha256; cv=none; b=RJ6b4wqs6nZjq20Onmgtd4ecdM6Dll93TzBDhHo4itLtSQJFm/Oeth8vTnAO8UXLHNWV8a k/g+sjsUekYhhi+SdnjECfbAnxDuFYAQt2aARcoqEF8tTZmGDFFnmS0mJh9Zz5KmG2CPeh qX6d3tTv/eX9gpGEkId0bXW+HvoAk5+iauT48W1lLnmYDdOkc+7SHLQnMhQMyjpQ1GGhkS zW7oooD31j98eU9osMGXKMuzYQKvZq0t8FE/j89SrapmAxfEjoizgnq8tPVj9GUL/jd7+w zbWFWbmy5LdSZiWEWUH8gNdrMQ9S/7FOlq7atYBgExZlnxk+DcHB6HWnbBpgCw== 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=1743989349; 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=mUTp/JYg4OgekTiRHzbAQA0UORn7goYINWvgX1VcpEw=; b=Wq3G3Q2X0AzvnGit2YMCCC9BK3a97Fm8eJwUebMov8s2Yms6p5H4UR2Zd/XTVcR17Zq5I3 1eMa5gPmxCioHLQZ6LixVWuQqbe5cn03YZnUb5vJMdfPEAs1ii4G02Tm8Y+GC/iRsZSG6I e9I1g+ec56SBltGoh5KL5OK0R8zV+frwAvXgOmbqeukKBoT2bEdYfG4V9cA+AfEeexd/Be VtVyHcqv3tdDAqPmrABHzicr0I8imGSrnE91SJpJRc7hrQ21V8X5soDZARTeaL93hgOkYr eg5frh+7k1ab09HKGnyFl/lTZRtPsDrnvbBgxQAT6VSzPjtJS8tMCX55HRv2qA== 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 4ZWBSj0jFHz9gk; Mon, 07 Apr 2025 01:29:09 +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 5371T81d063196; Mon, 7 Apr 2025 01:29:08 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5371T8gF063193; Mon, 7 Apr 2025 01:29:08 GMT (envelope-from git) Date: Mon, 7 Apr 2025 01:29:08 GMT Message-Id: <202504070129.5371T8gF063193@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: 5e6b89bd560b - stable/14 - Add NT_PROCSTAT_KQUEUES core note 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: 5e6b89bd560bbb5c16cb1a8411fc6685cb312991 Auto-Submitted: auto-generated The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=5e6b89bd560bbb5c16cb1a8411fc6685cb312991 commit 5e6b89bd560bbb5c16cb1a8411fc6685cb312991 Author: Konstantin Belousov AuthorDate: 2025-03-13 22:31:25 +0000 Commit: Konstantin Belousov CommitDate: 2025-04-07 01:28:22 +0000 Add NT_PROCSTAT_KQUEUES core note (cherry picked from commit 5e7c43ff02dc0ec246582af24d3f4d03d5d55bf4) --- sys/kern/imgact_elf.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ sys/kern/kern_event.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ sys/sys/elf_common.h | 1 + sys/sys/user.h | 2 ++ 4 files changed, 101 insertions(+) diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c index 18adb8adf4c8..0a09bb9e3891 100644 --- a/sys/kern/imgact_elf.c +++ b/sys/kern/imgact_elf.c @@ -1561,6 +1561,7 @@ static void __elfN(note_threadmd)(void *, struct sbuf *, size_t *); static void __elfN(note_procstat_auxv)(void *, struct sbuf *, size_t *); static void __elfN(note_procstat_proc)(void *, struct sbuf *, size_t *); static void __elfN(note_procstat_psstrings)(void *, struct sbuf *, size_t *); +static void __elfN(note_procstat_kqueues)(void *, struct sbuf *, size_t *); static void note_procstat_files(void *, struct sbuf *, size_t *); static void note_procstat_groups(void *, struct sbuf *, size_t *); static void note_procstat_osrel(void *, struct sbuf *, size_t *); @@ -1886,6 +1887,8 @@ __elfN(prepare_notes)(struct thread *td, struct note_info_list *list, __elfN(note_procstat_psstrings), p); size += __elfN(register_note)(td, list, NT_PROCSTAT_AUXV, __elfN(note_procstat_auxv), p); + size += __elfN(register_note)(td, list, NT_PROCSTAT_KQUEUES, + __elfN(note_procstat_kqueues), p); *sizep = size; } @@ -2703,6 +2706,54 @@ __elfN(note_procstat_auxv)(void *arg, struct sbuf *sb, size_t *sizep) } } +static void +__elfN(note_procstat_kqueues)(void *arg, struct sbuf *sb, size_t *sizep) +{ + struct proc *p; + size_t size, sect_sz, i; + ssize_t start_len, sect_len; + int structsize; + bool compat32; + +#if defined(COMPAT_FREEBSD32) && __ELF_WORD_SIZE == 32 + compat32 = true; + structsize = sizeof(struct kinfo_knote32); +#else + compat32 = false; + structsize = sizeof(struct kinfo_knote); +#endif + p = arg; + if (sb == NULL) { + size = 0; + sb = sbuf_new(NULL, NULL, 128, SBUF_FIXEDLEN); + sbuf_set_drain(sb, sbuf_count_drain, &size); + sbuf_bcat(sb, &structsize, sizeof(structsize)); + kern_proc_kqueues_out(p, sb, -1, compat32); + sbuf_finish(sb); + sbuf_delete(sb); + *sizep = size; + } else { + sbuf_start_section(sb, &start_len); + + sbuf_bcat(sb, &structsize, sizeof(structsize)); + kern_proc_kqueues_out(p, sb, *sizep - sizeof(structsize), + compat32); + + sect_len = sbuf_end_section(sb, start_len, 0, 0); + if (sect_len < 0) + return; + sect_sz = sect_len; + + KASSERT(sect_sz <= *sizep, + ("kern_proc_kqueue_out did not respect maxlen; " + "requested %zu, got %zu", *sizep - sizeof(structsize), + sect_sz - sizeof(structsize))); + + for (i = 0; i < *sizep - sect_sz && sb->s_error == 0; i++) + sbuf_putc(sb, 0); + } +} + #define MAX_NOTES_LOOP 4096 bool __elfN(parse_notes)(struct image_params *imgp, Elf_Note *checknote, diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index c7260f6bb267..8188323bdbc9 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -2940,6 +2940,53 @@ out: return (error); } +struct kern_proc_kqueues_out1_cb_args { + struct sbuf *s; + bool compat32; +}; + +static int +kern_proc_kqueues_out1_cb(struct proc *p, int fd, struct file *fp, void *arg) +{ + struct kqueue *kq; + struct kern_proc_kqueues_out1_cb_args *a; + + if (fp->f_type != DTYPE_KQUEUE) + return (0); + a = arg; + kq = fp->f_data; + return (kern_proc_kqueue_report(a->s, p, fd, kq, a->compat32)); +} + +static int +kern_proc_kqueues_out1(struct thread *td, struct proc *p, struct sbuf *s, + bool compat32) +{ + 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)); +} + +int +kern_proc_kqueues_out(struct proc *p, struct sbuf *sb, size_t maxlen, + bool compat32) +{ + struct sbuf *s, sm; + int error; + + s = sbuf_new(&sm, NULL, maxlen, SBUF_FIXEDLEN); + error = kern_proc_kqueues_out1(curthread, p, s, compat32); + sbuf_finish(s); + if (error == 0) + sbuf_bcat(sb, sbuf_data(s), MIN(sbuf_len(s), maxlen)); + sbuf_delete(s); + return (error); +} + static int sysctl_kern_proc_kqueue(SYSCTL_HANDLER_ARGS) { diff --git a/sys/sys/elf_common.h b/sys/sys/elf_common.h index 0c7d7e2b2fc3..79237db2a0a6 100644 --- a/sys/sys/elf_common.h +++ b/sys/sys/elf_common.h @@ -820,6 +820,7 @@ typedef struct { #define NT_PROCSTAT_PSSTRINGS 15 /* Procstat ps_strings data. */ #define NT_PROCSTAT_AUXV 16 /* Procstat auxv data. */ #define NT_PTLWPINFO 17 /* Thread ptrace miscellaneous info. */ +#define NT_PROCSTAT_KQUEUES 18 /* Procstat kqueues events. */ #define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ #define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ #define NT_X86_SEGBASES 0x200 /* x86 FS/GS base addresses. */ diff --git a/sys/sys/user.h b/sys/sys/user.h index 34031c99fc97..943de0737457 100644 --- a/sys/sys/user.h +++ b/sys/sys/user.h @@ -723,6 +723,8 @@ int kern_proc_cwd_out(struct proc *p, struct sbuf *sb, ssize_t maxlen); int kern_proc_out(struct proc *p, struct sbuf *sb, int flags); int kern_proc_vmmap_out(struct proc *p, struct sbuf *sb, ssize_t maxlen, int flags); +int kern_proc_kqueues_out(struct proc *p, struct sbuf *s, size_t maxlen, + bool compat32); int vntype_to_kinfo(int vtype); void pack_kinfo(struct kinfo_file *kif);