1.\" 2.\" Copyright (c) 2015 Mark Johnston <markj@FreeBSD.org> 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 13.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR 14.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 15.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 16.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, 17.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 18.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 19.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23.\" 24.\" $FreeBSD$ 25.\" 26.Dd December 7, 2015 27.Dt PROC_RWMEM 9 28.Os 29.Sh NAME 30.Nm proc_rwmem , 31.Nm proc_readmem , 32.Nm proc_writemem 33.Nd read from or write to a process address space 34.Sh SYNOPSIS 35.In sys/types.h 36.In sys/ptrace.h 37.Ft int 38.Fn proc_rwmem "struct proc *p" "struct uio *uio" 39.Ft ssize_t 40.Fn proc_readmem "struct thread *td" "struct proc *p" "vm_offset_t va" "void *buf" "size_t len" 41.Ft ssize_t 42.Fn proc_writemem "struct thread *td" "struct proc *p" "vm_offset_t va" "void *buf" "size_t len" 43.Sh DESCRIPTION 44These functions are used to read to or write from the address space of the 45process 46.Fa p . 47The 48.Fn proc_rwmem 49function requires the caller to specify the I/O parameters using a 50.Vt "struct uio" , 51described in 52.Xr uio 9 . 53The 54.Fn proc_readmem 55and 56.Fn proc_writemem 57functions provide a simpler, less general interface which allows the caller to 58read into or write the kernel buffer 59.Fa buf 60of size 61.Fa len 62from or to the memory at offset 63.Fa va 64in the address space of 65.Fa p . 66The operation is performed on behalf of thread 67.Fa td , 68which will most often be the current thread. 69.Pp 70These functions may sleep and thus may not be called with any non-sleepable 71locks held. 72The process 73.Fa p 74must be held by the caller using 75.Xr PHOLD 9 . 76.Sh RETURN VALUES 77The 78.Fn proc_rwmem 79function returns 80.Dv 0 81on success. 82.Dv EFAULT 83is returned if the specified user address is invalid, and 84.Dv ENOMEM 85is returned if the target pages could not be faulted in due to a resource 86shortage. 87.Pp 88The 89.Fn proc_readmem 90and 91.Fn proc_writemem 92functions return the number of bytes read or written, respectively. 93This may be smaller than the number of bytes requested, for example if the 94request spans multiple pages in the process address space and one of them after 95the first is not mapped. 96Otherwise, -1 is returned. 97.Sh SEE ALSO 98.Xr copyin 9 , 99.Xr locking 9 , 100.Xr PHOLD 9 , 101.Xr uio 9 102.Sh AUTHORS 103This manual page was written by 104.An Mark Johnston Aq Mt markj@FreeBSD.org . 105