aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2013-12-11 05:35:11 -0500
committerDave Airlie <airlied@redhat.com>2013-12-17 20:44:01 -0500
commitd016da589c1c1cf3821a26abcc03122b772ac044 (patch)
treed1f5e2c89b172344df23e3926e5556edee15b645
parent99c09e745d078b630dbb3ea2895eaa597f1cebc4 (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.c46
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++) {