The branch stable/14 has been updated by kib:

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

commit da1398dd6962b458fdcf25799fcb512f4d9c070d
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2026-06-14 23:49:20 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2026-06-28 00:28:59 +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 6c010490f43b..a0a8e0f1f2b5 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -3293,6 +3293,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;
 
@@ -3300,6 +3301,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);
@@ -3311,8 +3313,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);
@@ -3364,7 +3371,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);
 }
 

Reply via email to