Index: sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c =================================================================== --- sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c +++ sys/cddl/contrib/opensolaris/uts/common/dtrace/fasttrap.c @@ -336,8 +336,9 @@ */ addr = 0; error = vm_map_find(&p->p_vmspace->vm_map, NULL, 0, &addr, - FASTTRAP_SCRBLOCK_SIZE, 0, VMFS_ANY_SPACE, VM_PROT_ALL, - VM_PROT_ALL, 0); + FASTTRAP_SCRBLOCK_SIZE, 0, VMFS_ANY_SPACE, + VM_PROT_READ | VM_PROT_EXECUTE, + VM_PROT_READ | VM_PROT_EXECUTE, MAP_COPY_ON_WRITE); if (error != KERN_SUCCESS) goto done; @@ -588,7 +589,7 @@ fasttrap_proc_t *fprc = NULL; #endif pid_t ppid = p->p_pid; - int i; + int error, i; ASSERT(curproc == p); #ifdef illumos @@ -678,9 +679,10 @@ if (fprc != NULL) { mutex_enter(&fprc->ftpc_mtx); LIST_FOREACH(scrblk, &fprc->ftpc_scrblks, ftsb_next) { - vm_map_remove(&cp->p_vmspace->vm_map, + error = vm_map_remove(&cp->p_vmspace->vm_map, scrblk->ftsb_addr, scrblk->ftsb_addr + FASTTRAP_SCRBLOCK_SIZE); + ASSERT(error == KERN_SUCCESS); } mutex_exit(&fprc->ftpc_mtx); } Index: sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c =================================================================== --- sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c +++ sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c @@ -1666,7 +1666,7 @@ ASSERT(i <= sizeof (scratch)); - if (fasttrap_copyout(scratch, (char *)addr, i)) { + if (uwrite(curproc, scratch, i, addr) != 0) { fasttrap_sigtrap(p, curthread, pc); new_pc = pc; break; Index: sys/kern/sys_process.c =================================================================== --- sys/kern/sys_process.c +++ sys/kern/sys_process.c @@ -340,7 +340,8 @@ * curthread but we can't assert that.) This keeps the process * from exiting out from under us until this operation completes. */ - PROC_ASSERT_HELD(p); + if (p != curproc) + PROC_ASSERT_HELD(p); PROC_LOCK_ASSERT(p, MA_NOTOWNED); /*