git: 7212b3734593 - main - kinfo_proc: report address of extended kernel error structure

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Sat, 31 May 2025 19:52:53 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=7212b37345936899e979c63d0b054e114576faa0

commit 7212b37345936899e979c63d0b054e114576faa0
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-05-24 03:37:00 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2025-05-31 19:52:41 +0000

    kinfo_proc: report address of extended kernel error structure
    
    Reviewed by:    brooks
    Sponsored by:   The FreeBSD Foundation
    MFC after:      2 weeks
    Differential revision:  https://reviews.freebsd.org/D50483
---
 sys/compat/freebsd32/freebsd32.h | 1 +
 sys/kern/kern_proc.c             | 4 ++++
 sys/sys/user.h                   | 3 ++-
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/sys/compat/freebsd32/freebsd32.h b/sys/compat/freebsd32/freebsd32.h
index 9d7a99535288..9d724c93fee7 100644
--- a/sys/compat/freebsd32/freebsd32.h
+++ b/sys/compat/freebsd32/freebsd32.h
@@ -419,6 +419,7 @@ struct kinfo_proc32 {
 	uint32_t ki_kstack;
 	uint32_t ki_udata;
 	uint32_t ki_tdaddr;
+	uint32_t ki_uerrmsg;
 	uint32_t ki_spareptrs[KI_NSPARE_PTR];	/* spare room for growth */
 	int	ki_sparelongs[KI_NSPARE_LONG];
 	int	ki_sflag;
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 191143443d42..379fbda619c0 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -1348,6 +1348,9 @@ fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp, int preferthread)
 	thread_unlock(td);
 	if (preferthread)
 		PROC_STATUNLOCK(p);
+
+	if ((td->td_pflags & TDP2_UEXTERR) != 0)
+		kp->ki_uerrmsg = td->td_exterr_ptr;
 }
 
 /*
@@ -1503,6 +1506,7 @@ freebsd32_kinfo_proc_out(const struct kinfo_proc *ki, struct kinfo_proc32 *ki32)
 	PTRTRIM_CP(*ki, *ki32, ki_tdaddr);
 	CP(*ki, *ki32, ki_sflag);
 	CP(*ki, *ki32, ki_tdflags);
+	PTRTRIM_CP(*ki, *ki32, ki_uerrmsg);
 }
 #endif
 
diff --git a/sys/sys/user.h b/sys/sys/user.h
index 0c443672a3b1..f94a91ca1238 100644
--- a/sys/sys/user.h
+++ b/sys/sys/user.h
@@ -86,7 +86,7 @@
  */
 #define	KI_NSPARE_INT	2
 #define	KI_NSPARE_LONG	12
-#define	KI_NSPARE_PTR	5
+#define	KI_NSPARE_PTR	4
 
 #ifndef _KERNEL
 #ifndef KINFO_PROC_SIZE
@@ -212,6 +212,7 @@ struct kinfo_proc {
 	 * That way the spare room from both arrays will remain contiguous.
 	 */
 	struct	pwddesc *ki_pd;	/* pointer to process paths info */
+	void	*ki_uerrmsg;		/* address of the ext err msg place */
 	void	*ki_spareptrs[KI_NSPARE_PTR];	/* spare room for growth */
 	long	ki_sparelongs[KI_NSPARE_LONG];	/* spare room for growth */
 	long	ki_sflag;		/* PS_* flags */