diff options
author | Dan Carpenter <dan.carpenter@oracle.com> | 2013-12-11 05:35:11 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-12-17 20:44:01 -0500 |
commit | d016da589c1c1cf3821a26abcc03122b772ac044 (patch) | |
tree | d1f5e2c89b172344df23e3926e5556edee15b645 | |
parent | 99c09e745d078b630dbb3ea2895eaa597f1cebc4 (diff) |
drm: use memdup_user() as a cleanup
drivers/gpu/drm/r128/r128_state.c:1014:10-17: WARNING opportunity for memdup_user
/c/kernel-tests/src/cocci/drivers/gpu/drm/r128/r128_state.c:1029:9-16: WARNING opportunity for memdup_user
/c/kernel-tests/src/cocci/drivers/gpu/drm/r128/r128_state.c:904:10-17: WARNING opportunity for memdup_user
/c/kernel-tests/src/cocci/drivers/gpu/drm/r128/r128_state.c:914:9-16: WARNING opportunity for memdup_user
Use memdup_user rather than duplicating its implementation
This is a little bit restricted to reduce false positives
Generated by: coccinelle/api/memdup_user.cocci
CC: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/r128/r128_state.c | 46 |
1 files changed, 12 insertions, 34 deletions
diff --git a/drivers/gpu/drm/r128/r128_state.c b/drivers/gpu/drm/r128/r128_state.c index 818986b52e8c..e806dacd452f 100644 --- a/drivers/gpu/drm/r128/r128_state.c +++ b/drivers/gpu/drm/r128/r128_state.c | |||
@@ -901,25 +901,16 @@ static int r128_cce_dispatch_write_span(struct drm_device *dev, | |||
901 | return -EFAULT; | 901 | return -EFAULT; |
902 | 902 | ||
903 | buffer_size = depth->n * sizeof(u32); | 903 | buffer_size = depth->n * sizeof(u32); |
904 | buffer = kmalloc(buffer_size, GFP_KERNEL); | 904 | buffer = memdup_user(depth->buffer, buffer_size); |
905 | if (buffer == NULL) | 905 | if (IS_ERR(buffer)) |
906 | return -ENOMEM; | 906 | return PTR_ERR(buffer); |
907 | if (copy_from_user(buffer, depth->buffer, buffer_size)) { | ||
908 | kfree(buffer); | ||
909 | return -EFAULT; | ||
910 | } | ||
911 | 907 | ||
912 | mask_size = depth->n * sizeof(u8); | 908 | mask_size = depth->n * sizeof(u8); |
913 | if (depth->mask) { | 909 | if (depth->mask) { |
914 | mask = kmalloc(mask_size, GFP_KERNEL); | 910 | mask = memdup_user(depth->mask, mask_size); |
915 | if (mask == NULL) { | 911 | if (IS_ERR(mask)) { |
916 | kfree(buffer); | 912 | kfree(buffer); |
917 | return -ENOMEM; | 913 | return PTR_ERR(mask); |
918 | } | ||
919 | if (copy_from_user(mask, depth->mask, mask_size)) { | ||
920 | kfree(buffer); | ||
921 | kfree(mask); | ||
922 | return -EFAULT; | ||
923 | } | 914 | } |
924 | 915 | ||
925 | for (i = 0; i < count; i++, x++) { | 916 | for (i = 0; i < count; i++, x++) { |
@@ -1011,34 +1002,21 @@ static int r128_cce_dispatch_write_pixels(struct drm_device *dev, | |||
1011 | } | 1002 | } |
1012 | 1003 | ||
1013 | buffer_size = depth->n * sizeof(u32); | 1004 | buffer_size = depth->n * sizeof(u32); |
1014 | buffer = kmalloc(buffer_size, GFP_KERNEL); | 1005 | buffer = memdup_user(depth->buffer, buffer_size); |
1015 | if (buffer == NULL) { | 1006 | if (IS_ERR(buffer)) { |
1016 | kfree(x); | ||
1017 | kfree(y); | ||
1018 | return -ENOMEM; | ||
1019 | } | ||
1020 | if (copy_from_user(buffer, depth->buffer, buffer_size)) { | ||
1021 | kfree(x); | 1007 | kfree(x); |
1022 | kfree(y); | 1008 | kfree(y); |
1023 | kfree(buffer); | 1009 | return PTR_ERR(buffer); |
1024 | return -EFAULT; | ||
1025 | } | 1010 | } |
1026 | 1011 | ||
1027 | if (depth->mask) { | 1012 | if (depth->mask) { |
1028 | mask_size = depth->n * sizeof(u8); | 1013 | mask_size = depth->n * sizeof(u8); |
1029 | mask = kmalloc(mask_size, GFP_KERNEL); | 1014 | mask = memdup_user(depth->mask, mask_size); |
1030 | if (mask == NULL) { | 1015 | if (IS_ERR(mask)) { |
1031 | kfree(x); | ||
1032 | kfree(y); | ||
1033 | kfree(buffer); | ||
1034 | return -ENOMEM; | ||
1035 | } | ||
1036 | if (copy_from_user(mask, depth->mask, mask_size)) { | ||
1037 | kfree(x); | 1016 | kfree(x); |
1038 | kfree(y); | 1017 | kfree(y); |
1039 | kfree(buffer); | 1018 | kfree(buffer); |
1040 | kfree(mask); | 1019 | return PTR_ERR(mask); |
1041 | return -EFAULT; | ||
1042 | } | 1020 | } |
1043 | 1021 | ||
1044 | for (i = 0; i < count; i++) { | 1022 | for (i = 0; i < count; i++) { |