diff options
Diffstat (limited to 'drivers/gpu/drm/r128')
| -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)) { |