git: 6393594b0362 - main - copyin tests: Use the KERN_PROC_VM_LAYOUT sysctl to fetch layout info

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Mon, 17 Jan 2022 21:13:11 UTC
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=6393594b0362432de937e432908ea6dae79ae0a9

commit 6393594b0362432de937e432908ea6dae79ae0a9
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2022-01-17 16:43:43 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2022-01-17 21:12:43 +0000

    copyin tests: Use the KERN_PROC_VM_LAYOUT sysctl to fetch layout info
    
    ... rather than using the KERN_PROC_PS_STRINGS value to derive the top
    of the user address space.
    
    Reviewed by:    kib
    MFC after:      1 month
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D33708
---
 tests/sys/kern/kern_copyin.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/tests/sys/kern/kern_copyin.c b/tests/sys/kern/kern_copyin.c
index eb1fea315b5a..de12753c8dcd 100644
--- a/tests/sys/kern/kern_copyin.c
+++ b/tests/sys/kern/kern_copyin.c
@@ -33,6 +33,8 @@ __FBSDID("$FreeBSD$");
 #include <sys/param.h>
 #include <sys/exec.h>
 #include <sys/sysctl.h>
+#include <sys/user.h>
+
 #include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
@@ -74,27 +76,20 @@ copyin_checker2(uintptr_t uaddr)
 static uintptr_t
 get_maxuser_address(void)
 {
+	struct kinfo_vm_layout kvm;
 	size_t len;
-	uintptr_t psstrings;
 	int error, mib[4];
 
 	mib[0] = CTL_KERN;
 	mib[1] = KERN_PROC;
-	mib[2] = KERN_PROC_PS_STRINGS;
+	mib[2] = KERN_PROC_VM_LAYOUT;
 	mib[3] = getpid();
-	len = sizeof(psstrings);
-	error = sysctl(mib, nitems(mib), &psstrings, &len, NULL, 0);
+	len = sizeof(kvm);
+	error = sysctl(mib, nitems(mib), &kvm, &len, NULL, 0);
 	if (error != 0)
 		return (0);
 
-	if (psstrings == PS_STRINGS_LA57)
-		return (VM_MAXUSER_ADDRESS_LA57);
-	if (psstrings == PS_STRINGS_LA48)
-		return (VM_MAXUSER_ADDRESS_LA48);
-	/* AMD LA48 with clipped UVA */
-	if (psstrings == PS_STRINGS_LA48 - PAGE_SIZE)
-		return (VM_MAXUSER_ADDRESS_LA48 - PAGE_SIZE);
-	return (0);
+	return (kvm.kvm_max_user_addr);
 }
 #endif