diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2015-03-21 14:47:11 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2015-04-11 22:27:12 -0400 |
| commit | 17d17e728224f69311675e2ff312e992b7cc7b1e (patch) | |
| tree | d6c2384a803bb6fd761f2ad1ce4ad17b2d7f47aa | |
| parent | b353a1f7bbd6c015e8563e902f7c78710348e28f (diff) | |
process_vm_access: switch to {compat_,}import_iovec()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | mm/process_vm_access.c | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c index b1597690530c..e88d071648c2 100644 --- a/mm/process_vm_access.c +++ b/mm/process_vm_access.c | |||
| @@ -257,22 +257,18 @@ static ssize_t process_vm_rw(pid_t pid, | |||
| 257 | struct iovec *iov_r = iovstack_r; | 257 | struct iovec *iov_r = iovstack_r; |
| 258 | struct iov_iter iter; | 258 | struct iov_iter iter; |
| 259 | ssize_t rc; | 259 | ssize_t rc; |
| 260 | int dir = vm_write ? WRITE : READ; | ||
| 260 | 261 | ||
| 261 | if (flags != 0) | 262 | if (flags != 0) |
| 262 | return -EINVAL; | 263 | return -EINVAL; |
| 263 | 264 | ||
| 264 | /* Check iovecs */ | 265 | /* Check iovecs */ |
| 265 | if (vm_write) | 266 | rc = import_iovec(dir, lvec, liovcnt, UIO_FASTIOV, &iov_l, &iter); |
| 266 | rc = rw_copy_check_uvector(WRITE, lvec, liovcnt, UIO_FASTIOV, | 267 | if (rc < 0) |
| 267 | iovstack_l, &iov_l); | 268 | return rc; |
| 268 | else | 269 | if (!iov_iter_count(&iter)) |
| 269 | rc = rw_copy_check_uvector(READ, lvec, liovcnt, UIO_FASTIOV, | ||
| 270 | iovstack_l, &iov_l); | ||
| 271 | if (rc <= 0) | ||
| 272 | goto free_iovecs; | 270 | goto free_iovecs; |
| 273 | 271 | ||
| 274 | iov_iter_init(&iter, vm_write ? WRITE : READ, iov_l, liovcnt, rc); | ||
| 275 | |||
| 276 | rc = rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt, UIO_FASTIOV, | 272 | rc = rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt, UIO_FASTIOV, |
| 277 | iovstack_r, &iov_r); | 273 | iovstack_r, &iov_r); |
| 278 | if (rc <= 0) | 274 | if (rc <= 0) |
| @@ -283,8 +279,7 @@ static ssize_t process_vm_rw(pid_t pid, | |||
| 283 | free_iovecs: | 279 | free_iovecs: |
| 284 | if (iov_r != iovstack_r) | 280 | if (iov_r != iovstack_r) |
| 285 | kfree(iov_r); | 281 | kfree(iov_r); |
| 286 | if (iov_l != iovstack_l) | 282 | kfree(iov_l); |
| 287 | kfree(iov_l); | ||
| 288 | 283 | ||
| 289 | return rc; | 284 | return rc; |
| 290 | } | 285 | } |
| @@ -320,21 +315,16 @@ compat_process_vm_rw(compat_pid_t pid, | |||
| 320 | struct iovec *iov_r = iovstack_r; | 315 | struct iovec *iov_r = iovstack_r; |
| 321 | struct iov_iter iter; | 316 | struct iov_iter iter; |
| 322 | ssize_t rc = -EFAULT; | 317 | ssize_t rc = -EFAULT; |
| 318 | int dir = vm_write ? WRITE : READ; | ||
| 323 | 319 | ||
| 324 | if (flags != 0) | 320 | if (flags != 0) |
| 325 | return -EINVAL; | 321 | return -EINVAL; |
| 326 | 322 | ||
| 327 | if (vm_write) | 323 | rc = compat_import_iovec(dir, lvec, liovcnt, UIO_FASTIOV, &iov_l, &iter); |
| 328 | rc = compat_rw_copy_check_uvector(WRITE, lvec, liovcnt, | 324 | if (rc < 0) |
| 329 | UIO_FASTIOV, iovstack_l, | 325 | return rc; |
| 330 | &iov_l); | 326 | if (!iov_iter_count(&iter)) |
| 331 | else | ||
| 332 | rc = compat_rw_copy_check_uvector(READ, lvec, liovcnt, | ||
| 333 | UIO_FASTIOV, iovstack_l, | ||
| 334 | &iov_l); | ||
| 335 | if (rc <= 0) | ||
| 336 | goto free_iovecs; | 327 | goto free_iovecs; |
| 337 | iov_iter_init(&iter, vm_write ? WRITE : READ, iov_l, liovcnt, rc); | ||
| 338 | rc = compat_rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt, | 328 | rc = compat_rw_copy_check_uvector(CHECK_IOVEC_ONLY, rvec, riovcnt, |
| 339 | UIO_FASTIOV, iovstack_r, | 329 | UIO_FASTIOV, iovstack_r, |
| 340 | &iov_r); | 330 | &iov_r); |
| @@ -346,8 +336,7 @@ compat_process_vm_rw(compat_pid_t pid, | |||
| 346 | free_iovecs: | 336 | free_iovecs: |
| 347 | if (iov_r != iovstack_r) | 337 | if (iov_r != iovstack_r) |
| 348 | kfree(iov_r); | 338 | kfree(iov_r); |
| 349 | if (iov_l != iovstack_l) | 339 | kfree(iov_l); |
| 350 | kfree(iov_l); | ||
| 351 | return rc; | 340 | return rc; |
| 352 | } | 341 | } |
| 353 | 342 | ||
