git: eb03358c407d - stable/15 - kern_proc.c: ensure stability of the vmspace for sysctl kern.proc.vm_layout
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 26 Jun 2026 22:20:50 UTC
The branch stable/15 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=eb03358c407d6f3c073320bdc26a5e4ceb923ca1
commit eb03358c407d6f3c073320bdc26a5e4ceb923ca1
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-06-14 23:49:20 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-06-26 22:16:06 +0000
kern_proc.c: ensure stability of the vmspace for sysctl kern.proc.vm_layout
(cherry picked from commit 31fa677e4af00b795bf671847b4dc72960c90f14)
---
sys/kern/kern_proc.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 5d37d0b5fa39..1e09e6042e7a 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -3292,6 +3292,7 @@ sysctl_kern_proc_vm_layout(SYSCTL_HANDLER_ARGS)
{
struct kinfo_vm_layout kvm;
struct proc *p;
+ struct thread *td;
struct vmspace *vmspace;
int error, *name;
@@ -3299,6 +3300,7 @@ sysctl_kern_proc_vm_layout(SYSCTL_HANDLER_ARGS)
if ((u_int)arg2 != 1)
return (EINVAL);
+ td = curthread;
error = pget((pid_t)name[0], PGET_CANDEBUG, &p);
if (error != 0)
return (error);
@@ -3310,8 +3312,13 @@ sysctl_kern_proc_vm_layout(SYSCTL_HANDLER_ARGS)
}
}
#endif
- vmspace = vmspace_acquire_ref(p);
+ _PHOLD(p);
PROC_UNLOCK(p);
+ error = proc_vmspace_ref(td, p, PRVM_CHECK_DEBUG, &vmspace);
+ if (error != 0) {
+ PRELE(p);
+ return (error);
+ }
memset(&kvm, 0, sizeof(kvm));
kvm.kvm_min_user_addr = vm_map_min(&vmspace->vm_map);
@@ -3363,7 +3370,8 @@ sysctl_kern_proc_vm_layout(SYSCTL_HANDLER_ARGS)
#ifdef COMPAT_FREEBSD32
out:
#endif
- vmspace_free(vmspace);
+ proc_vmspace_unref(td, p, PRVM_CHECK_DEBUG, vmspace);
+ PRELE(p);
return (error);
}