| 293 | } |
| 294 | |
| 295 | static ssize_t |
| 296 | proc_iop(struct thread *td, struct proc *p, vm_offset_t va, void *buf, |
| 297 | size_t len, enum uio_rw rw) |
| 298 | { |
| 299 | struct iovec iov; |
| 300 | struct uio uio; |
| 301 | ssize_t slen; |
| 302 | |
| 303 | MPASS(len < SSIZE_MAX); |
| 304 | slen = (ssize_t)len; |
| 305 | |
| 306 | iov.iov_base = (caddr_t)buf; |
| 307 | iov.iov_len = len; |
| 308 | uio.uio_iov = &iov; |
| 309 | uio.uio_iovcnt = 1; |
| 310 | uio.uio_offset = va; |
| 311 | uio.uio_resid = slen; |
| 312 | uio.uio_segflg = UIO_SYSSPACE; |
| 313 | uio.uio_rw = rw; |
| 314 | uio.uio_td = td; |
| 315 | proc_rwmem(p, &uio); |
| 316 | if (uio.uio_resid == slen) |
| 317 | return (-1); |
| 318 | return (slen - uio.uio_resid); |
| 319 | } |
| 320 | |
| 321 | ssize_t |
| 322 | proc_readmem(struct thread *td, struct proc *p, vm_offset_t va, void *buf, |
no test coverage detected