diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2017-12-27 19:00:09 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2017-12-27 19:00:09 -0500 |
commit | 3d26759c09da7242db6ae18ce9a0f6b09bfeafcc (patch) | |
tree | 2f31a8e0a6d860d6590e3045001c32800d78ac8d | |
parent | f1ee616214cb22410e939d963bbb2349c2570f02 (diff) | |
download | linux-3d26759c09da7242db6ae18ce9a0f6b09bfeafcc.tar.gz linux-3d26759c09da7242db6ae18ce9a0f6b09bfeafcc.tar.bz2 linux-3d26759c09da7242db6ae18ce9a0f6b09bfeafcc.zip |
r128: don't open-code memdup_user()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | drivers/gpu/drm/r128/r128_state.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/drivers/gpu/drm/r128/r128_state.c b/drivers/gpu/drm/r128/r128_state.c index 8fdc56c1c953..b9bfa806d346 100644 --- a/drivers/gpu/drm/r128/r128_state.c +++ b/drivers/gpu/drm/r128/r128_state.c @@ -982,25 +982,14 @@ static int r128_cce_dispatch_write_pixels(struct drm_device *dev, xbuf_size = count * sizeof(*x); ybuf_size = count * sizeof(*y); - x = kmalloc(xbuf_size, GFP_KERNEL); - if (x == NULL) - return -ENOMEM; - y = kmalloc(ybuf_size, GFP_KERNEL); - if (y == NULL) { - kfree(x); - return -ENOMEM; - } - if (copy_from_user(x, depth->x, xbuf_size)) { - kfree(x); - kfree(y); - return -EFAULT; - } - if (copy_from_user(y, depth->y, xbuf_size)) { + x = memdup_user(depth->x, xbuf_size); + if (IS_ERR(x)) + return PTR_ERR(x); + y = memdup_user(depth->y, ybuf_size); + if (IS_ERR(y)) { kfree(x); - kfree(y); - return -EFAULT; + return PTR_ERR(y); } - buffer_size = depth->n * sizeof(u32); buffer = memdup_user(depth->buffer, buffer_size); if (IS_ERR(buffer)) { |