diff options
| author | Dan Carpenter <dan.carpenter@oracle.com> | 2014-12-23 04:56:49 -0500 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2015-01-05 12:10:08 -0500 |
| commit | dd5a74f2f982193620cfa1ef609df1ee805781d4 (patch) | |
| tree | 6ea42eebf713a63abc6f40492b512f54cba42d38 | |
| parent | 02ae7af53a451a1b0a51022c4693f5b339133e79 (diff) | |
drm/radeon: integer underflow in radeon_cp_dispatch_texture()
The test:
if (size > RADEON_MAX_TEXTURE_SIZE) {
"size" is an integer and it's controled by the user so it can be
negative and the test can underflow. Later we use "size" in:
dwords = size / 4;
...
RADEON_COPY_MT(buffer, data, (int)(dwords * sizeof(u32)));
It causes memory corruption to copy a negative size buffer.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_state.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c index 535403e0c8a2..15aee723db77 100644 --- a/drivers/gpu/drm/radeon/radeon_state.c +++ b/drivers/gpu/drm/radeon/radeon_state.c | |||
| @@ -1703,7 +1703,7 @@ static int radeon_cp_dispatch_texture(struct drm_device * dev, | |||
| 1703 | u32 format; | 1703 | u32 format; |
| 1704 | u32 *buffer; | 1704 | u32 *buffer; |
| 1705 | const u8 __user *data; | 1705 | const u8 __user *data; |
| 1706 | int size, dwords, tex_width, blit_width, spitch; | 1706 | unsigned int size, dwords, tex_width, blit_width, spitch; |
| 1707 | u32 height; | 1707 | u32 height; |
| 1708 | int i; | 1708 | int i; |
| 1709 | u32 texpitch, microtile; | 1709 | u32 texpitch, microtile; |
