summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-03-08 04:27:51 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2018-03-08 04:27:51 -0800
commit07324253e2e621c2cf54105c5612e341a9f305ad (patch)
treead50111bdeced762fc6fad5434c84cf1287220a8 /drivers/gpu
parentb02928f9da8443672d7c4953c2a79ba445fb3e7a (diff)
parent6252123a99088896c420a6b1721239210cba81af (diff)
Merge "DRM: SDE: Fix potential buffer overflow in SDE encoder"
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_encoder.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder.c b/drivers/gpu/drm/msm/sde/sde_encoder.c
index cb8b349e72c7..6e4de62c6957 100644
--- a/drivers/gpu/drm/msm/sde/sde_encoder.c
+++ b/drivers/gpu/drm/msm/sde/sde_encoder.c
@@ -43,6 +43,8 @@
/* timeout in frames waiting for frame done */
#define SDE_ENCODER_FRAME_DONE_TIMEOUT 60
+#define MISR_BUFF_SIZE 256
+
/*
* Two to anticipate panels that can do cmd/vid dynamic switching
* plan is to create all possible physical encoder types, and switch between
@@ -1046,16 +1048,18 @@ static ssize_t _sde_encoder_misr_set(struct file *file,
struct sde_encoder_virt *sde_enc;
struct drm_encoder *drm_enc;
int i = 0;
- char buf[10];
+ char buf[MISR_BUFF_SIZE + 1];
+ size_t buff_copy;
u32 enable, frame_count;
drm_enc = file->private_data;
sde_enc = to_sde_encoder_virt(drm_enc);
- if (copy_from_user(buf, user_buf, count))
- return -EFAULT;
+ buff_copy = min_t(size_t, MISR_BUFF_SIZE, count);
+ if (copy_from_user(buf, user_buf, buff_copy))
+ return -EINVAL;
- buf[count] = 0; /* end of string */
+ buf[buff_copy] = 0; /* end of string */
if (sscanf(buf, "%u %u", &enable, &frame_count) != 2)
return -EFAULT;